更新:这个问题的先前版本错误地将问题归咎于使用minitoc
获取节级目录(\secttoc
)。
我有一个复杂的文档,其中有内容表,并且可以在单列和双列模式之间切换。
我想删除子从文本中删除章节标题,但将其保留在目录中。
我尝试过来自这个答案的食谱:
\newcommand{\nosubsection}[1]{%
\refstepcounter{subsection}%
\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#1}%
\markright{#1}}
这几乎可以工作,但目录显示错误。例如,
1 first section
1.1 first sub
1.1.1 first subsub
1.1.2 second subsub
1.2.1 first subsub % <--- WRONG
1.2 second sub
但实际上应该
1 first section
1.1 first sub
1.1.1 first subsub
1.1.2 second subsub
1.2 second sub
1.2.1 first subsub
我认为这是由于在单列和双列模式之间切换时出现了奇怪的交互:每个小节中的第一个小节被放在了它们所属的上方小节中。即使我只是想包含本应不执行任何操作的内容,也会发生这种情况\onecolumn\twocolumn
。
这是一个平均能量损失(或者实际上,失败例子):
\documentclass[11pt]{article}
\newcommand{\nosubsection}[1]{%
\refstepcounter{subsection}%
\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#1}%
\markright{#1}}
\begin{document}
\tableofcontents
\section{first section---show all subs 1---works}
\subsection{first sub 1.1}
\twocolumn[{\subsubsection{first subsub 1.1.1}}]
\twocolumn[{\subsubsection{second subsub 1.1.2}}]
\subsection{second sub 1.2}
\twocolumn[{\subsubsection{first subsub 1.2.1}}]
\section{second section--don't show subs 2 --- fails}
\nosubsection{first sub 2.1} %\label{sub:2.1}
\twocolumn[{\subsubsection{first subsub 2.1.1}}]
\twocolumn[{\subsubsection{second subsub 2.1.2}}]
\onecolumn %%%% these casuse the problem, I think
\twocolumn
\nosubsection{second sub 2.2}
\twocolumn[{\subsubsection{first subsub 2.2.1 \textbf{WRONG}}}]
\end{document}
(请注意,你需要nosubsection
和列切换以获取失败。)
我有也尝试使用该multicol
包,但遇到了同样的问题。
有任何想法吗?
答案1
标题的相关部分\subsection
是(例如,\@sect
参见宏)latex.ltx
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
如果在部分级别为 时不应出现这种情况subsection
,则可以使用 进行修补\ifstrequal
以测试是否#1
等于subsection
。
我\begin{multicols}{2}...\end{multicols}
也添加了包装纸。
\documentclass[11pt]{article}
\usepackage{multicol}
\usepackage{blindtext}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@sect}{%
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
}{%
\ifstrequal{#1}{subsection}{%
% Do nothing here!
}{%
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
}%
}{\typeout{successful patching}}{\typeout{Nope}}
\makeatother
\begin{document}
\tableofcontents
\section{first section---show all subs 1---works}
\subsection{first sub 1.1}
\begin{multicols}{2}
\subsubsection{first subsub 1.1.1}
\blindtext[2]
\subsubsection{second subsub 1.1.2}
\blindtext[2]
\end{multicols}
\subsection{second sub 1.2}
\begin{multicols}{2}
\subsubsection{first subsub 1.2.1}
\blindtext[5]
\end{multicols}
\section{second section--don't show subs 2 --- works now}
\subsection{first sub 2.1} %\label{sub:2.1}
\begin{multicols}{2}
\subsubsection{first subsub 2.1.1}
\blindtext[10]
\subsubsection{second subsub 2.1.2}
\blindtext[5]
\end{multicols}
\subsection{second sub 2.2}
\begin{multicols}{2}
\subsubsection{first subsub 2.2.1 \textbf{CORRECT}}
\blindtext[5]
\end{multicols}
\end{document}