有没有办法有条件地“幻影”文档的某些部分(而无需两次输入相同的“幻影”文本)?
目前,我正在使用 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
)。