Phantom e etoolbox iftoggle

Phantom e etoolbox iftoggle

Existe uma maneira de 'fantasma' condicionalmente partes do meu documento (sem digitar o mesmo texto 'fantasma' duas vezes)?

Atualmente, estou usando o pacote etoolbox, newtoggle/settoggle e iftoggle para expandir seletivamente partes do meu documento.

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

Observe que se texto_longo for longo, então tenho dois segmentos de texto muito longos, o que é indesejável porque o arquivo .tex fica cada vez maior em relação ao tamanho do disco. Eu queria saber se era possível 'fantasma' long_text sem necessariamente digitar long_text duas vezes.

Estou tentando fazer algo assim, mas estou tendo dificuldade em fazer com que o LaTeX reconheça que o caractere de chaveta faz parte do arquivo .tex, em vez de ser um caractere de chaveta como parte do documento final:

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

Logicamente, estou tentando colocar chaves fantasmas em torno de long_text sempre que o sinalizador for verdadeiro. Portanto, long_text sempre será exibido, mas o fantasma aparecerá ao seu redor dependendo da veracidade da bandeira.

Obrigado.

Responder1

Você pode simplesmente inserir a macro apropriada - ou \phantom( \relaxque não faz nada):

insira a descrição da imagem aqui

\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 que isso funciona? É porque \phantomnão aceita argumentos. É uma função "intermediária" antes que a mágica aconteça, então sua alternância apenas insere a macro correta no fluxo de entrada. Certifique-se de colocar o texto entre colchetesdepoisseu \iftoggle.

Comentário de Joseph Wright: Usar \relaxaqui deixa um conjunto de colchetes, o que pode afetar o espaçamento no modo matemático. Mais seguro seria definir \newcommand{\firtofone}[1]{#1}e usar isso (ou \makeatletterusar \@firstofone).

informação relacionada