我正在尝试帮助一位朋友排版一本书,我已经将大部分内容转换为使用章节、节、小节和小小节。但是,有些章节的形式是“离题”否:文本”。离题编号独立递增,我已经设法定义了自己的标题样式。这是我目前的 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
。事情是这样的:
- 如果我在题外话后面放了一个部分,pdflatex 将不会处理第二次运行,因为它在文件中出现问题
dig.toc
。它会抱怨“出了点问题——可能是缺少 \item”...}{\numberline {2}What's Best}{1}{Section.2}
。 - 对 的调用
\dig{Strangely Echoed}
还会将题外话标题放在标题后面(但与 很好地结合在一起\autoref{...}
)。 - 为了重新排列题外话标题文本并删除重复内容,我定义了
\digression
,但我无法将其与\autoref
hyperref 包的功能集成。在输出 PDF 中,\autoref
引用 的\digression
使用了“section”前缀。 - 目录似乎
\dig
也没有很好地格式化基于标题的格式。
那么,请问我怎样才能得到一个单独编号的题外话标题序列,形式为“题外话否:标题”可以穿插在调用之间\section
并与之配合使用\autoref
?
答案1
您需要提供 的定义
\l@dig
,这就是 LaTeX 翻译的\contentsline{dig}
您需要定义一个宏
\digmark
(还有\sectionmark
所有其他类似的宏)如果
*
你想与\autoref
见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
允许在数字前面添加“离题”。
我不知道如何设置离题的书签级别,抱歉。