Phantom y etoolbox iftoggle

Phantom y etoolbox iftoggle

¿Hay alguna manera de "fantasmar" condicionalmente partes de mi documento (sin escribir el mismo texto "fantasma" dos veces)?

Actualmente, estoy usando el paquete etoolbox, newtoggle/settoggle e iftoggle para expandir selectivamente partes de mi documento.

\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}{\phantom{long_text}}{long_text}
\end{document}

Observe que si long_text es largo, entonces tengo dos segmentos de texto muy largos, lo cual no es deseable porque el archivo .tex se vuelve cada vez más grande con respecto al tamaño del disco. Me preguntaba si era posible hacer un 'texto fantasma' sin tener que escribir texto largo dos veces.

Estoy intentando hacer algo como esto, pero tengo dificultades para que LaTeX reconozca que el carácter de llave es parte del archivo .tex, en lugar de como un carácter de llave como parte del documento final:

\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}
{
\phantom{}\{
}
{}
long_text
\iftoggle{flag_name}
{
\}
}
{}
\end{document}

Lógicamente, estoy tratando de colocar llaves fantasma alrededor de long_text siempre que la bandera sea verdadera. Por lo tanto, siempre se generará texto largo, pero el fantasma aparecerá a su alrededor dependiendo de la veracidad de la bandera.

Gracias.

Respuesta1

Puede simplemente insertar la macro apropiada, ya sea \phantomo \relax(que no hace nada):

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}{\phantom}{\relax}{long text} short text \par
\settoggle{flag_name}{false}
\iftoggle{flag_name}{\phantom}{\relax}{long text} short text
\end{document}

¿Por qué funciona esto? Es porque \phantomno acepta ningún argumento. Es una función "intermedia" antes de que ocurra la magia, por lo que su palanca simplemente inserta la macro correcta en el flujo de entrada. Asegúrate de poner llaves en el texto.despuéssu \iftoggle.

Comentario de Joseph Wright: Usar \relaxhere deja un conjunto de llaves, lo que podría afectar el espaciado en el modo matemático. Más seguro sería definir \newcommand{\firtofone}[1]{#1}y usar eso (o \makeatletterusar \@firstofone).

información relacionada