仅当非空时才添加至内容行

仅当非空时才添加至内容行

我正在使用一个宏,它执行以下操作:

\addcontentsline{toc}{section}{\string\iffoo bla \string\fi}

正常编译时,foofalse,因此该行不应出现在目录中。但是当文件.toc包含在其他脚本中时,我在该脚本中设置footrue,同一.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}

在此处输入图片描述

相关内容