Я пытаюсь создать команду, которую мы можем использовать для комментариев в нашем документе. Во время разработки мы хотим, чтобы комментарии появлялись; для производства мы хотим, чтобы они исчезали. Это достаточно распространенная проблема со множеством решений.
У меня проблема с токенизатором 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}