Phantom 和 etoolbox iftoggle

Phantom 和 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

Joseph Wright 的评论:\relax此处使用会留下一组括号,这可能会影响数学模式中的间距。更安全的做法是定义\newcommand{\firtofone}[1]{#1}并使用它(或定义\makeatletter并使用它\@firstofone)。

相关内容