문서의 주석에 사용할 수 있는 명령을 만들려고 합니다. 개발하는 동안 우리는 주석이 나타나기를 원합니다. 생산을 위해 우리는 그것들이 사라지기를 원합니다. 이는 많은 솔루션에서 흔히 발생하는 문제입니다.
하지만 LaTeX의 토크나이저에 문제가 있습니다. 명령이 공백으로 둘러싸여 있으면 두 개의 공백이 표시됩니다. 왜 그런 일이 일어나는지 이해하지만 내가 찾을 수 있는 해결 방법 중 어느 것도 나에게 좋지 않습니다. 여기에 대표적인 예가 있습니다.
\documentclass[letterpaper]{article}
\newif\ifnotes
\newcommand{\note}[1]{\ifnotes{#1}\fi}
\notesfalse
\newcommand{\nonotes}{\notesfalse}
\begin{document}
\pagestyle{empty}
Testing \note{X} testing testing.
\end{document}
호출 되었으므로 \notesfalse
메모가 표시되어서는 안 됩니다. 그러나 명령의 왼쪽과 오른쪽에 있는 공백은하다나타나는데 이것이 나에게 문제가 됩니다.
그 뒤의 모든 공백을 먹도록 명령을 수정할 수 있지만 이는 실제로 올바른 동작도 아닙니다. 명령이라면오직뒤에 공백이 있으면( 에서처럼 the\note{...} text
) 여전히 방출된 공간이 있어야 합니다. \unskip
이전 공간을 삭제하는 등의 작업을 사용할 수 있다는 것을 알고 있지만감지하다이전(및 다음) 공간을 유지해야 할지 여부에 대해 지능적인 결정을 내릴 수 있습니다.
이 작업을 수행하기 위한 제안 사항이 있는 사람이 있습니까?
답변1
여기에 해결책이 있습니다
\documentclass[letterpaper]{article}
\newif\ifnotes
\makeatletter
\newcommand{\note}[1]{\@bsphack\ifnotes{#1}\fi\@esphack}
\makeatother
\notesfalse
\newcommand{\nonotes}{\notesfalse}
\begin{document}
\pagestyle{empty}
Testing \note{X} testing testing.
Testing\note{X} testing testing.
Testing \note{X}testing testing.
Testing\note{X}testing testing.
\notestrue
Testing \note{X} testing testing.
Testing\note{X} testing testing.
Testing \note{X}testing testing.
Testing\note{X}testing testing.
\end{document}