ドキュメント内のコメントに使用できるコマンドを作成しようとしています。開発中はコメントを表示し、本番環境ではコメントを非表示にしたいです。これは多くの解決策でよく見られる問題です。
しかし、LaTeX のトークナイザーに問題があります。コマンドがスペースで囲まれている場合、2 つのスペースが生成されます。なぜそうなるのかは理解していますが、私が見つけた回避策はどれも役に立ちません。代表的な例を以下に示します。
\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}