Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
pgfkeys와 ifthen / etoolbox
2018.08.20 16:13
TeX Live 2018 (MacTeX, High Sierra 10.13.6, XeLaTeX으로 컴파일했습니다.
pgfkeys를 사용할 때 \ifthenelse와 etoolbox의 \ifstr류의 차이를 문의드립니다.
\pgfkeyssetvalue{foo}{bar}라 했을 때
\ifthenelse{___}{true}{false}에서 ___에 \equal{\pgfkeysvalueof{foo}}{bar}를 넣을 경우 true false의 분기가 잘 일어납니다.
그러나 etoolbox에서 \ifstrequal{\pgfkeysvalueof{foo}}{bar}{true}{false}라 할 경우 true false의 분기가 잘 일어나지 않습니다.
MWE는 아래와 같습니다. 고견 기다리겠습니다. 항상 감사드립니다.
\documentclass{oblivoir}
\usepackage{ifthen,etoolbox,pgfkeys}
\begin{document}
\pgfkeyssetvalue{foo}{bar}
\ifthenelse{\equal{\pgfkeysvalueof{foo}}{bar}}{true}{false}
\pgfkeyssetvalue{foo}{foo}
\ifthenelse{\equal{\pgfkeysvalueof{foo}}{bar}}{true}{false}
\pgfkeyssetvalue{foo}{bar}
\ifstrequal{\pgfkeysvalueof{foo}}{bar}{true}{false}
\pgfkeyssetvalue{foo}{foo}
\ifstrequal{\pgfkeysvalueof{foo}}{bar}{true}{false}
\end{document}
댓글 2
-
yihoze
2018.08.20 18:11
-
Kriss
2018.08.20 22:06
예전에 아예 TEXBOOK을 안봤을 땐 발췌해주신 문장을 이해하기 힘들었는데, 지금은 발췌해주신 문장을 보니 기초적인 수준이나마 이해가 되네요. 다른 함수나 패키지를 찾아봐야겠습니다. \ifstrequal{<string>}{<string>}{<true>}{<false>} 볼 생각은 했으면서 밑의 설명은 왜 안 읽었는지.. 스스로가 한심하네요ㅜㅜ
번거롭게 해드려 죄송하고, 알려주셔서 감사합니다.
아래는 굳이 읽어보실 필요는 없지만, pgfkeysvalueof를 사용했던 상황을 설명드리자면..
pgfkeys를 이용해서 문제를 개별 tex파일로 데이터베이스화했습니다. 개별 tex파일에는 아래와 같은 형식으로 문제/해설을 저장했고요.
pgfkeyssetvalue{contents}{문제내용} pgfkeyssetvalue{contents}{헤설내용} (그외에도 많은 정보들을 동일하게 했습니다)
그리고 일정한 조건이나 양식에 맞추어 개별 텍파일을 input하여 문제집과 해설지를 제작해왔습니다.
문제집이면 pgfkeysvalueof{contets}를 쭈욱 출력하고, 해설지면 solution, 교사용이면 contents와 solution을 출력하는 식으로요.
그래서 pgfkeysvalueof로 그런 조건들을 조정하고 있었는데, ifthenelse에서는 pgfkeysvalueof로 잘 되었는데, etoolbox를 써보니 더 간편해서 ifthen을 대체해서 쓰다가이걸 쓰려니 되질 않아서 질문드렸었습니다.
\pgfkeysvalueof 명령의 장점이 뭔지 잘 모르겠군요. 그리고 \ifstrequal도, 나름 이유가 있겠지만, 왜 만들었나 싶습니다. etoolbox 매뉴얼에 보면
\ifstrequal{<string>}{<string>}{<true>}{<false>}
Compares two strings and executes <true> if they are equal, and <false> otherwise. The strings are not expanded in the test and the comparison is category code agnostic. Control sequence tokens in any of the <string> arguments will be detokenized and treated as strings.
무슨 뜻인고 하니, \pgfkeysvalueof의 값이 비교되는 게 아니라는 뜻입니다.