创建不带额外空格的可移动注释命令

创建不带额外空格的可移动注释命令

我正在尝试创建一个命令,用于我们文档中的注释。在开发过程中,我们希望注释出现;在生产过程中,我们希望注释消失。这是许多解决方案中常见的问题。

不过,我遇到了 LaTeX 的 tokenizer 问题;如果命令被空格包围,则会发出两个空格。我理解为什么会发生这种情况,但我找到的所有解决方法都不适合我。这是一个代表性示例。

\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}

在此处输入图片描述

相关内容