Ich versuche, einen Befehl zu erstellen, den wir für Kommentare in unserem Dokument verwenden können. Während der Entwicklung möchten wir, dass die Kommentare angezeigt werden; während der Produktion möchten wir, dass sie verschwinden. Dies ist ein recht häufiges Problem bei vielen Lösungen.
Ich habe jedoch ein Problem mit dem Tokenizer von LaTeX. Wenn der Befehl von Leerzeichen umgeben ist, werden zwei Leerzeichen ausgegeben. Ich verstehe, warum das passiert, aber keiner der Workarounds, die ich finden kann, hilft mir weiter. Hier ist ein repräsentatives Beispiel.
\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}
Da \notesfalse
aufgerufen wurde, sollte die Notiz nicht erscheinen (und wird es auch nicht). Aber die Leerzeichen links und rechts vom BefehlTunerscheinen, was für mich ein Problem darstellt.
Ich könnte den Befehl so ändern, dass alle Leerzeichen dahinter verschwinden, aber das ist auch nicht wirklich das richtige Verhalten. Wenn der BefehlnurLeerzeichen folgen (wie in the\note{...} text
), sollte trotzdem ein Leerzeichen ausgegeben werden. Ich weiß zwar, dass man Dinge wie \unskip
das Löschen vorangehender Leerzeichen verwenden kann, aber ich bin ratlos,erkennendas vorhergehende (und folgende) Leerzeichen, damit ich eine fundierte Entscheidung darüber treffen kann, ob es dort bleiben soll.
Hat jemand Vorschläge zur Erledigung dieser Aufgabe?
Antwort1
Hier ist eine Lösung
\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}