![创建不带额外空格的可移动注释命令](https://linux22.com/image/328362/%E5%88%9B%E5%BB%BA%E4%B8%8D%E5%B8%A6%E9%A2%9D%E5%A4%96%E7%A9%BA%E6%A0%BC%E7%9A%84%E5%8F%AF%E7%A7%BB%E5%8A%A8%E6%B3%A8%E9%87%8A%E5%91%BD%E4%BB%A4.png)
我正在尝试创建一个命令,用于我们文档中的注释。在开发过程中,我们希望注释出现;在生产过程中,我们希望注释消失。这是许多解决方案中常见的问题。
不过,我遇到了 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}