我正在使用一个宏,它执行以下操作:
\addcontentsline{toc}{section}{\string\iffoo bla \string\fi}
正常编译时,foo
为false
,因此该行不应出现在目录中。但是当文件.toc
包含在其他脚本中时,我在该脚本中设置foo
为true
,同一.toc
文件也应显示bla
。
如果我使用上面的代码,我会得到
\contentsline {section}{\iffoo bla \fi }{1}{section.0.1}
当为 false 时,它会打印.....
一行,但不打印任何文本foo
。我可能需要的是:
\iffoo \contentsline {section}{bla}{1}{section.0.1} \fi
我如何获得它?
答案1
由于内容行应该只\iffoo
扩展为真,所以在第 3 个参数中进行测试是没有用的\addcontentsline
,因为这将启动文件\contentsline
中的机器.aux
,从而导致.toc
无论如何进入。
为了防止这种情况,必须进行测试外部的\addcontentsline
。请参见下面示例中的两种不同行为。两个“空”行是内部测试的结果\addcontentsline
——我很确定这不是我们想要的。
\documentclass{article}
\usepackage{blindtext}
\newif\iffoo
\foofalse
\begin{document}
\tableofcontents
\clearpage
\section{First}
\blindtext
\addcontentsline{toc}{section}{\string\iffoo\ Will be in the toc or empty \string\fi}
\iffoo
\addcontentsline{toc}{section}{Will be in the toc only if foo is true}
\fi
\section{another one}
\footrue
\addcontentsline{toc}{section}{\string\iffoo\ Will not appear in the toc but the page number will be there \string\fi}
\iffoo
\addcontentsline{toc}{section}{Will be in the toc only if foo is true too}
\fi
\end{document}