Есть ли способ условно «фантомировать» части моего документа (без ввода одного и того же «фантомного» текста дважды)?
В настоящее время я использую пакет etoolbox, newtoggle/settoggle и iftoggle для выборочного расширения частей моего документа.
\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}{\phantom{long_text}}{long_text}
\end{document}
Обратите внимание, что если long_text длинный, то у меня есть два очень длинных текстовых сегмента, что нежелательно, поскольку файл .tex становится длиннее и больше по отношению к размеру диска. Я задавался вопросом, возможно ли «призрак» long_text без необходимости дважды вводить long_text.
Я пытаюсь сделать что-то подобное, но у меня возникают трудности с тем, чтобы LaTeX распознал, что символ фигурной скобки является частью файла .tex, а не как символ фигурной скобки в конечном документе:
\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}
{
\phantom{}\{
}
{}
long_text
\iftoggle{flag_name}
{
\}
}
{}
\end{document}
Логично, я пытаюсь получить фантомные скобки вокруг long_text всякий раз, когда флаг истинен. Таким образом, long_text всегда будет выводиться, но фантом будет появляться вокруг него в зависимости от истинности флага.
Спасибо.
решение1
Вы можете просто вставить соответствующий макрос — либо \phantom
( \relax
что ничего не делает):
\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}
Почему это работает? Потому что \phantom
не принимает никаких аргументов. Это «промежуточная» функция перед тем, как произойдет магия, поэтому ваш переключатель просто вставляет правильный макрос в поток ввода. Убедитесь, что вы заключили текст в скобкипослетвой \iftoggle
.
Комментарий Джозефа Райта: Использование \relax
здесь оставляет в наборе фигурных скобок, что может повлиять на интервал в математическом режиме. Безопаснее было бы определить \newcommand{\firtofone}[1]{#1}
и использовать это (или \makeatletter
и использовать \@firstofone
).