Gibt es eine Möglichkeit, Teile meines Dokuments bedingt zu „phantomisieren“ (ohne denselben „phantomisierten“ Text zweimal einzugeben)?
Derzeit verwende ich das etoolbox-Paket, newtoggle/settoggle und iftoggle, um Teile meines Dokuments selektiv zu erweitern.
\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}{\phantom{long_text}}{long_text}
\end{document}
Beachten Sie, dass ich, wenn long_text lang ist, zwei sehr lange Textsegmente habe, was unerwünscht ist, da die .tex-Datei im Hinblick auf die Festplattengröße länger und größer wird. Ich habe mich gefragt, ob es möglich ist, long_text zu „phantomisieren“, ohne long_text unbedingt zweimal einzugeben.
Ich versuche, so etwas zu tun, habe aber Schwierigkeiten, LaTeX dazu zu bringen, zu erkennen, dass das Klammern-Zeichen Teil der .tex-Datei ist, und nicht als Klammern-Zeichen Teil des endgültigen Dokuments:
\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}
{
\phantom{}\{
}
{}
long_text
\iftoggle{flag_name}
{
\}
}
{}
\end{document}
Logischerweise versuche ich, die Phantomklammern um long_text zu bekommen, wenn das Flag wahr ist. long_text wird also immer ausgegeben, aber das Phantom wird darum herum erscheinen, abhängig von der Wahrheit des Flags.
Danke.
Antwort1
Sie können einfach das entsprechende Makro einfügen – entweder \phantom
oder \relax
(was nichts bewirkt):
\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}
Warum funktioniert das? Weil \phantom
keine Argumente akzeptiert werden. Es ist eine „Zwischenfunktion“, bevor die Magie passiert, sodass Ihr Umschalter einfach das richtige Makro in den Eingabestrom einfügt. Stellen Sie sicher, dass Sie den Text in Klammern setzen.nachdein \iftoggle
.
Kommentar von Joseph Wright: Die Verwendung von \relax
here hinterlässt Klammern, die die Abstände im Mathematikmodus beeinflussen können. Sicherer wäre es, \newcommand{\firtofone}[1]{#1}
that zu definieren und zu verwenden (oder to \makeatletter
und zu verwenden \@firstofone
).