Создание команды удаляемого комментария без дополнительного пробела

Создание команды удаляемого комментария без дополнительного пробела

Я пытаюсь создать команду, которую мы можем использовать для комментариев в нашем документе. Во время разработки мы хотим, чтобы комментарии появлялись; для производства мы хотим, чтобы они исчезали. Это достаточно распространенная проблема со множеством решений.

У меня проблема с токенизатором 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}

введите описание изображения здесь

Связанный контент