从文本中删除章节标题,但不删除目录 - 与列的交互

从文本中删除章节标题,但不删除目录 - 与列的交互

更新:这个问题的先前版本错误地将问题归咎于使用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}

在此处输入图片描述

相关内容