추가 공간 없이 제거 가능한 주석 명령 생성

추가 공간 없이 제거 가능한 주석 명령 생성

문서의 주석에 사용할 수 있는 명령을 만들려고 합니다. 개발하는 동안 우리는 주석이 나타나기를 원합니다. 생산을 위해 우리는 그것들이 사라지기를 원합니다. 이는 많은 솔루션에서 흔히 발생하는 문제입니다.

하지만 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}

여기에 이미지 설명을 입력하세요

관련 정보