使用从目录中删除标题时*
,有时您可能希望查看目录中的所有标题 - 包括已删除的标题。但您只想暂时查看标题以检查文档中的内容和不存在的内容,而无需将所有带*
- 的标题更改为非 -*
标题(然后再改回来)。
我的问题:是否有一个命令或某种东西可以*
在整个文档中全局忽略 -ing,并且可以随时打开或关闭?
答案1
您可以在文档前言中包含以下补丁并使用\ifshowallintoc
条件激活它:
\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\newif\ifshowallintoc
%\showallintoctrue% Comment/uncomment to include all/not in ToC
\makeatletter
\ifshowallintoc
\patchcmd{\@startsection}% <cmd>
{\@ifstar}% <search>
{\xdef\@@section@level{#1}\xdef\@@section@level@num{#2}\@ifstar}% <replace>
{}{}% <success><failure>
\patchcmd{\@ssect}% <cmd>
{\@xsect}% <search>
{\addcontentsline{toc}{\@@section@level}{%
\ifnum \@@section@level@num>\c@secnumdepth \else
\protect\numberline{}%
\fi%
#5}\@xsect}% <replace>
{}{}% <success><failure>
\fi
\makeatother
\begin{document}
\tableofcontents
\section{A section}
\subsection{A subsection}
\subsection*{Another subsection}
\subsection{A subsection}
\section*{Another section}
\section{A section}
\subsection*{Another subsection}
\end{document}
取消注释\showallintoctrue
(因为默认为\showallintocfalse
)显示:
该解决方案背后的动机是存储以前使用星号版本的分段单元时丢失的信息。然后根据条件为真或假,将此信息写入 ToC 文件。使用补丁修改的主要宏(由etoolbox
's \patchcmd
) 是\@startsection
和\@ssect
。
请注意,此解决方案严重依赖于您使用的文档类。如果您不使用标准文档类之一,或者甚至使用支持\chapter
- 和\part
-level 命令的文档类(如book
和 )report
,则可能需要完全不同的补丁。