如何定义平行节类标题?

如何定义平行节类标题?

我正在尝试帮助一位朋友排版一本书,我已经将大部分内容转换为使用章节、节、小节和小小节。但是,有些章节的形式是“离题”:文本”。离题编号独立递增,我已经设法定义了自己的标题样式。这是我目前的 LaTeX:

\documentclass{article}
\usepackage{hyperref}

\newcounter{dig}
\newcommand{\digname}{digression}
\newcommand{\digautorefname}{Digression} % Found first by hyperref \autoref{...}
\makeatletter
% http://infohost.nmt.edu/tcc/help/pubs/nmtthesis/old/annotated/at.startsection.html
% http://help-csli.stanford.edu/tex/latex-sections.shtml
% http://zoonek.free.fr/LaTeX/LaTeX_samples_section/0.html
\newcommand\dig{\@startsection {dig}{2}{\z@}%
                               {-3.5ex plus -1ex minus -.2ex}%
                               {2.3ex plus .2ex}%
                               {\normalfont\Large\bfseries}}
\makeatother

\newcommand{\digprefix}{\digname\ \thedig :\ }
\newcommand{\digression}[1]{%
    \phantomsection%
    \refstepcounter{dig}%
    \addcontentsline{toc}{dig}{\digprefix #1}%
    \dig*{\digprefix #1}
}


\begin{document}
\tableofcontents

\section{You're Number One}
If you're interested, see \autoref{di:putfirst}.

\digression{Putting You First}
\label{di:putfirst}
Yes, but see \autoref{di:look}.

\dig{Strangely Echoed}
\label{di:echo}
This is body text.

\digression{Look Over There!}
\label{di:look}
What is happening in \autoref{di:echo}? The dig counter is currently \thedig . Go back to \autoref{di:putfirst}.

%\section{What's Best}
Choose the good.

\subsection{Huh}
I missed it.

\end{document}

虽然只有几行,但还是存在一些问题。我通过两次调用来处理它pdflatex dig.tex。事情是这样的:

  1. 如果我在题外话后面放了一个部分,pdflatex 将不会处理第二次运行,因为它在文件中出现问题dig.toc。它会抱怨“出了点问题——可能是缺少 \item” ...}{\numberline {2}What's Best}{1}{Section.2}
  2. 对 的调用\dig{Strangely Echoed}还会将题外话标题放在标题后面(但与 很好地结合在一起\autoref{...})。
  3. 为了重新排列题外话标题文本并删除重复内容,我定义了\digression,但我无法将其与\autorefhyperref 包的功能集成。在输出 PDF 中,\autoref引用 的\digression使用了“section”前缀。
  4. 目录似乎\dig也没有很好地格式化基于标题的格式。

那么,请问我怎样才能得到一个单独编号的题外话标题序列,形式为“题外话:标题”可以穿插在调用之间\section并与之配合使用\autoref

答案1

  1. 您需要提供 的定义\l@dig,这就是 LaTeX 翻译的\contentsline{dig}

  2. 您需要定义一个宏\digmark(还有\sectionmark所有其他类似的宏)

  3. 如果*你想与\autoref

  4. 见1.

我会这样做:

\documentclass{article}

\newcounter{digression}
\newcommand{\digressionname}{Digression}
\newcommand{\digautorefname}{Digression} % Found first by hyperref \autoref{...}
\makeatletter
\newcommand\digression{\@startsection{digression}{2}{\z@}%
                               {-3.5ex plus -1ex minus -.2ex}%
                               {2.3ex plus .2ex}%
                               {\normalfont\Large\bfseries}}
\renewcommand*{\@seccntformat}[1]{%
  \@nameuse{additional@#1}\@nameuse{the#1}\quad}
\def\additional@digression{\digressionname\space}
\newcommand*\l@digression[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \renewcommand\numberline[1]{Digression ##1: }%
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \bfseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
\def\digressionmark#1{}
\makeatother

\begin{document}
\tableofcontents

\section{You're Number One}
If you're interested, see \autoref{di:putfirst}.

\newpage\digression{Putting You First}
\label{di:putfirst}
Yes, but see \autoref{di:look}.

\newpage\digression{Strangely Echoed}
\label{di:echo}
This is body text.

\newpage\digression{Look Over There!}
\label{di:look}
What is happening in \autoref{di:echo}? The dig counter is currently \thedigression . Go back to \autoref{di:putfirst}.

\newpage\section{What's Best}
Choose the good.

\subsection{Huh}
I missed it.

\end{document}

目录中“题外话”条目的排版与章节类似;更改的定义\l@digression

重新定义的技巧\@seccntformat允许在数字前面添加“离题”。

我不知道如何设置离题的书签级别,抱歉。

相关内容