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
( \relax
que não faz nada):
\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 \phantom
nã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 \relax
aqui 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 \makeatletter
usar \@firstofone
).