Estoy intentando crear un comando que podamos usar para comentarios en nuestro documento. Durante el desarrollo, queremos que aparezcan los comentarios; para la producción, queremos que desaparezcan. Este es un problema bastante común con muchas soluciones.
Sin embargo, tengo un problema con el tokenizador de LaTeX; si el comando está rodeado de espacios, se emiten dos espacios. Entiendo por qué sucede eso, pero ninguna de las soluciones que puedo encontrar es buena para mí. He aquí un ejemplo representativo.
\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}
Debido a que \notesfalse
ha sido invocada, la nota no debería aparecer (y no aparece). Pero los espacios a la izquierda y a la derecha del comandohaceraparecen, lo cual es un problema para mí.
Podría modificar el comando para comer todos los espacios posteriores, pero este tampoco es el comportamiento correcto; si el comandosolotiene espacios a continuación (como en the\note{...} text
), aún debería haber un espacio emitido. Si bien sé que se pueden usar cosas como \unskip
eliminar el espacio anterior, no puedodetectarel espacio anterior (y siguiente) para poder tomar una decisión inteligente sobre si debería permanecer ahí.
¿Alguien tiene alguna sugerencia para realizar esta tarea?
Respuesta1
Aquí hay una solución
\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}