我正在嘗試建立一個可用於在文件中進行註釋的命令。在開發過程中,我們希望評論出現;對於生產,我們希望它們消失。這是一個很常見的問題,有很多解決方案。
不過,我對 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}