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>처럼 입력하시면 좋습니다.
texindy에서 actual 문자
2021.01.18 16:25
메므와 색인 스타일(memman.ist)에는 이렇게 선언되어 있습니다.
actual '?'
\indexentry{foo@\foo} 대신 \indexentry{foo?\foo}를 쓰겠다는 뜻입니다. \cmd 명령도 이에 맞춰 정의되어 있습니다.
\newcommand{\cmd}[1]{\cmdprint{#1}%
\index{\expandafter\@gobble\string#1?\string\cmdprint{\string#1}}}
전에는 작가의 유별난 기호인가보다 생각했는데, 실은 @가 포함된 매크로들을 색인에 넣기 위한 것으로 보입니다.
문제는, makeindex 대신 texindy를 쓸 때, texindy에게 actual 문자로 ?를 사용하라고 알려줄 방법이 없다는 것입니다. '@'가 포함된 단어를 색인에 넣을 일이 제게 없으니 사실 문제는 아닙니다. 그냥 actual 문자를 "@"로 되돌려놓으면 그만입니다. 그리고 정 그런 일이 필요하다면 @를 다른 문자로 바꾸어 \indexentry에 넣고 \printindex에서 되돌리는 꼼수를 써도 될 것 같습니다.
그런데 texindy에 actual 문자를 설정하는 파라미터 같은 게 당연히 있으리라 기대하고 인터넷을 뒤져보았지만 찾지 못했습니다. 답을 얻지 못하니 필요한 것이 아닌데도 괜시리 언짢습니다.
댓글 8
-
noname
2021.01.18 17:57
-
yihoze
2021.01.19 08:10
이 문서는 저도 보았지만 actual 문자를 변경하는 방법에 대한 언급은 찾지 못했습니다.
-
noname
2021.01.19 09:18
저 문서의 의미는 makeindex의 actual char를 사용하는 방법 자체가 xindy에서 필요없다는 것에 가깝습니다. (@문자에 의한 입력을 지원하기는 하지만). merge-rule과 sort-rule로 makeindex의 actual char 기능을 대체할 수 있다는 것이고요, 그러니까 actual 문자를 바꾸는 등의 기능은 제공하지 않는 것으로 이해됩니다.
glossaries 패키지가 actual 문자로 `?'를 사용하는데, xindy 지원의 경우에 \gls 명령이 불릴 때 이를 적절하게 조작하는 것으로 보입니다. 찾으시는 방법과는 다릅니다.
-
yihoze
2021.01.19 09:24
\textsf{foo} 같은 경우, \textsf를 무시해 버리니까 @가 굳이 필요하지 않다는 것은 알고 있습니다. 하지만 @가 필요한 경우가 있습니다. 바로 텍 명령어를 색인에 넣을 때입니다. 제가 해본 바로는 텍신디도 이렇게 해주어야 합니다. \index{foo@{\cmdprint{\foo}}
-
noname
2021.01.19 11:46
DIY로 하는 방법도 있겠습니다.
\begin{filecontents*}{mytest.xdy} (merge-rule "=" "a~b") \end{filecontents*} \documentclass[openany]{memoir} \usepackage[texindy]{imakeidx} \makeindex[options=-C utf8 -M ./mytest] \ExplSyntaxOn \NewDocumentCommand \ATLETTER { } { @ } \NewDocumentCommand \cmdindex { m } { \tl_set:Nx \l_tmpa_tl { \cs_to_str:N #1 } \regex_replace_all:nnN { \@ } { \= } \l_tmpa_tl \tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl \regex_replace_all:nnN { \= } { \c{ATLETTER} } \l_tmpb_tl \exp_args:No\index{\l_tmpa_tl@\texttt{\textbackslash \l_tmpb_tl}} } \ExplSyntaxOff \begin{document} abcd\index{abcd} \cmdindex{\@gobble} \cmdindex{\makeatletter} \cmdindex{\z@} \printindex \end{document}
-
yihoze
2021.01.19 14:10
완벽한 해법입니다. 고맙습니다.
-
noname
2021.01.29 11:19
혹시 이 코드를 어딘가 사용할 생각이시면 다음 한 줄을 더 두어서 expl3도 지원하게 할 수 있을 것 같습니다.
\regex_replace_all:nnN { \_ } { \c{textunderscore } } \l_tmpb_tl
아, 그리고 imakeidx 패키지가 사용된 문서(위의 예제)를 -shell-escape 옵션을 주어서 컴파일하면 재미있는 결과를 얻을 수 있습니다. makeindex 또는 texindy 명령을 별도로 실행할 필요가 없거든요.
-
yihoze
2021.01.29 15:45
이렇게 만들었습니다. '@'와 '?'를 서로 치환한다는 점을 제외하면 스트링으로 바꾸기 때문에 어떤 문자가 오든 문제가 되지 않을 것입니다.
\NewDocumentCommand \macroprint { m }{\str_set:Nx \l_tmpa_str { \tl_to_str:n {#1} }\regex_replace_all:nnN { \? }{ \@ } \l_tmpa_str\str_remove_all:Nn \l_tmpa_str { ~ }\texttt{\str_use:N \l_tmpa_str}}\NewDocumentCommand \macroindex { m }{\tl_if_head_eq_catcode:nNTF { #1 } \c_catcode_active_tl{\str_set:Nx \l_tmpa_str { \cs_to_str:N #1 }}{\str_set:Nn \l_tmpa_str { #1 }}\str_set:Nn \l_tmpb_str { #1 }\regex_replace_all:nnN { \@ }{ \? } \l_tmpa_str\regex_replace_all:nnN { \@ }{ \? } \l_tmpb_str\exp_args:NVV \macro_index_write:nn \l_tmpa_str \l_tmpb_str}\cs_new:Npn \macro_index_write:nn #1 #2{\index{#1@\macroprint{#2}}}\NewDocumentCommand \macro { m }{\macroprint{#1}\bool_if:NT \l_macro_index_bool{\macroindex{#1}}}
http://xindy.sourceforge.net/doc/faq-4.html#ss4.3