Фантом и etoolbox iftoggle

Фантом и etoolbox iftoggle

Есть ли способ условно «фантомировать» части моего документа (без ввода одного и того же «фантомного» текста дважды)?

В настоящее время я использую пакет 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).

Связанный контент