我在第一章的末尾有一个附录(部分),如下所示
Appendix 1.A Baz
但是,正如您在下图中看到的,目录没有正确显示附录计数器(它重叠)
我希望在 TOC 中实现的是
1 Foo
1.1 Bar.......
Appendix 1.A Baz......
以下是 MWE:
\documentclass{book}
\usepackage{etoolbox}
\newcommand*{\secappendix}[1]{%
\setcounter{section}{0}%
\renewcommand*{\thesection}{\appendixname\space\thechapter.\Alph{section}}%
\section{#1}\renewcommand*{\thesection}{\thechapter.\Alph{section}}%
}
\pretocmd{\chapter}{\renewcommand*{\thesection}{\thechapter.\arabic{section}}}{}{}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Foo}
\section{Bar}
\secappendix{Baz}
\end{document}
编辑:上述 MWE 在使用该hyperref
包时存在进一步的问题。从目录到附录标题的超链接(错误地)会将您带到第一部分,而指向附录中方程的超链接会将您带到第一部分中的方程。我尝试了此建议的解决方案回答但它似乎不起作用(事实上我认为它在相应的 MWE 中不起作用)。这是一个包含该hyperref
包的新 MWE。
\documentclass{book}
\usepackage{etoolbox}
\usepackage{lipsum}
\usepackage{amsmath}
\numberwithin{equation}{section}
\newcommand*{\secappendix}[1]{%
\setcounter{section}{0}%
\renewcommand*{\thesection}{\appendixname\space\thechapter.\Alph{section}}%
\section{#1}\renewcommand*{\thesection}{\thechapter.\Alph{section}}%
}
\preto{\chapter}{\renewcommand*{\thesection}{\thechapter.\arabic{section}}}
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Foo}
\section{Bar}
\begin{equation}
\label{eq:1}
1 + 1 = 2
\end{equation}
\lipsum
\secappendix{Baz}
\begin{equation}
\label{eq:2}
2 + 2 = 4
\end{equation}
Hyperlink to \ref{eq:2}
\end{document}
编辑2:将命令更改为
\newcommand*{\secappendix}[1]{%
\setcounter{section}{0}%
\renewcommand*{\thesection}{\appendixname\space\thechapter.\Alph{section}}%
\renewcommand*{\theHsection}{\thechapter.\Alph{section}}%
\section{#1}\renewcommand*{\thesection}{\thechapter.\Alph{section}}%
}
似乎解决了hyperref
问题,但 TOC 问题仍然存在。
编辑3:既然我已经添加了悬赏,我想我应该解释一下这个问题背后的动机。我不希望章节的附录与章节处于同一级别,因为附录(只是)章节的一部分。因此我想将附录视为章节。我还想表明附录实际上是附录。我想要实现的是这样的
1 Chapter title
1.1 Section title
1.1.1 Subsection title
Appendix 1.A Appendix title
1.A.1 Appendix subsection title
答案1
这个解决方案不使用任何包(除了OP已经有的),而是\addtocontents{toc}{...}
在作者定义的命令中添加一个\secappendix
。
以下命令带有 3 个参数,用于设置l@section
。 的默认值为numwidth
2.3em,而不是此处的 7em。 可以根据需要进行调整。
\@dottedtocline{<level>}{<indentation>}{<numwidth>}}
如果要删除目录中的虚线,请在序言中使用以下内容。
\makeatletter
\renewcommand\@dotsep{450}
\makeatother
代码
\documentclass{book}
\usepackage{etoolbox}
\usepackage{lipsum}
\usepackage{amsmath}
\numberwithin{equation}{section}
\newcommand*{\secappendix}[1]{%
\setcounter{section}{0}%
\addtocontents{toc}
{\string\renewcommand\string\l@section{\string\@dottedtocline{1}{1.5em}{7em}}}
\renewcommand*{\thesection}{\appendixname\space\thechapter.\Alph{section}}%
\section{#1}
\renewcommand*{\thesection}{\thechapter.\Alph{section}}%
\addtocontents{toc}
{\string\renewcommand\string\l@section{\string\@dottedtocline{1}{1.5em}{2.3em}}}
}
\preto{\chapter}{\renewcommand*{\thesection}{\thechapter.\arabic{section}}}
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Foo}
Here is a link to \ref{app:baz}.
\section{Bar}
\begin{equation}
\label{eq:1}
1 + 1 = 2
\end{equation}
\subsection{Subsection title}
\lipsum[1]
\secappendix{Baz}
\label{app:baz}
\begin{equation}
\label{eq:2}
2 + 2 = 4
\end{equation}
\subsection{Appendix subsection title}
\lipsum[1]
Hyperlink to \ref{eq:2}
\chapter{Chapter 2}
\section{Test}
\subsection{Test subsection title}
\secappendix{TestBaz}
\subsection{TestBaz subsection title}
\end{document}
编辑: 楼主希望将作者定义的节名也放入书签中,为此,本解决方案向bookmark
包寻求帮助,请在包后加载hyperref
以避免崩溃。然后\pdfbookmark[section]{\thesection~#1}{#1}
分别将 和 添加<level><bookmark text><internal label>
到作者定义的宏中,如下所示。
\usepackage[colorlinks=true]{hyperref}
\usepackage{bookmark} % <-- here
\newcommand*{\secappendix}[1]{%
\setcounter{section}{0}%
\addtocontents{toc}
{\string\renewcommand\string\l@section{\string\@dottedtocline{1}{1.5em}{7em}}}
\renewcommand*{\thesection}{\appendixname\space\thechapter.\Alph{section}}%
\section{#1}
\pdfbookmark[section]{\thesection~#1}{#1} %<-- Here
\renewcommand*{\thesection}{\thechapter.\Alph{section}}%
\addtocontents{toc}
{\string\renewcommand\string\l@section{\string\@dottedtocline{1}{1.5em}{2.3em}}}
}
最后更新:似乎每次\section{#1}
调用 OP 定义的宏时,它都会自动插入一个书签,如果使用该包,则会导致重复的书签bookmark
。一旦 OP 通知,就会启动调查。为了删除多余的书签,此解决方案修改了 OP 定义的宏(此处用 <-- 标记),而不使用bookmark
会导致冗余的宏。OP 想要的目标已经实现,因此再次发布完整代码以避免歧义。
** 完整代码:**
\documentclass{book}
\usepackage{etoolbox}
\usepackage{lipsum}
\usepackage{amsmath}
\numberwithin{equation}{section}
\newcommand*{\secappendix}[1]{%
\setcounter{section}{1} %<-- here
\setcounter{subsection}{0} %<-- here
\addtocontents{toc}
{\string\renewcommand\string\l@section{\string\@dottedtocline{1}{1.5em}{7em}}}
\renewcommand*{\thesection}{\appendixname\space\thechapter.\Alph{section}}%
\section*{\thesection~#1} %<-- here
\phantomsection %<-- here
\addcontentsline{toc}{section}{\thesection~#1} %<-- here
\renewcommand*{\thesection}{\thechapter.\Alph{section}}%
\addtocontents{toc}
{\string\renewcommand\string\l@section{\string\@dottedtocline{1}{1.5em}{2.3em}}}
}
\preto{\chapter}{\renewcommand*{\thesection}{\thechapter.\arabic{section}}}
\usepackage[colorlinks=true]{hyperref}
%\usepackage{bookmark}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Foo}
Here is a link to \ref{app:baz}.
\section{Bar}
\begin{equation}
\label{eq:1}
1 + 1 = 2
\end{equation}
\subsection{Subsection title}
\lipsum[1]
\secappendix{Baz}
\label{app:baz}
\begin{equation}
\label{eq:2}
2 + 2 = 4
\end{equation}
\subsection{Appendix subsection title}
\subsection{Appendix second subsection title}
\lipsum[1]
Hyperlink to \ref{eq:2}
\chapter{Indentation}
\lipsum[1]
\section{Test}
\lipsum[1]
\subsection{Test subsection title}
\lipsum[1]
\secappendix{TestBaz}
\lipsum[1]
\subsection{TestBaz subsection title}
\subsection{TestBaz second subsection title}
\chapter{Bookmark}
\lipsum[1]
\section{Test2}
\lipsum[1]
\subsection{Test2 subsection title}
\lipsum[1]
\secappendix{Test2}
\lipsum[1]
\subsection{Test2 subsection title}
\subsection{Test2 second subsection title}
\end{document}
答案2
问题是你想用字符串“ Appendix 1.A
”替换节的编号,但没有足够的空间容纳整个字符串。你可以为其指定更多的空间,但我认为结果不是你所期望的。
\documentclass{book}
\usepackage{etoolbox}
\newcommand*{\secappendix}[1]{%
\setcounter{section}{0}%
\renewcommand*{\thesection}{\appendixname\space\thechapter.\Alph{section}}%
\section{#1}\renewcommand*{\thesection}{\thechapter.\Alph{section}}%
}
\pretocmd{\chapter}{\renewcommand*{\thesection}{\thechapter.\arabic{section}}}{}{}
\makeatletter
\renewcommand*\l@section{\@dottedtocline{2}{0.6em}{10em}}
\makeatother
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Foo}
\section{Bar}
\secappendix{Baz}
\end{document}
对如何修改目录中的长度进行了很好的解释这里。但我认为,目录期望章节的编号始终具有相同的长度或等效长度,例如 1.2 或 1.11。
答案3
这是基于答案在这里,以及附录包的文档。
\documentclass{book}
\usepackage[title,titletoc]{appendix}
\usepackage{lipsum}
\usepackage{amsmath}
\numberwithin{equation}{section}
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Foo}
Here is a link to \ref{app:baz}.
\section{Bar}
\begin{equation}
\label{eq:1}
1 + 1 = 2
\end{equation}
\lipsum
\subsection{Fu}
\lipsum[71]
\begin{subappendices}
\section{Baz}\label{app:baz}
\begin{equation}
\label{eq:2}
2 + 2 = 4
\end{equation}
Hyperlink to \ref{eq:1} and \ref{eq:2}
\subsection{Badd}
\lipsum[5-6]
\end{subappendices}
\end{document}
图表 1:
图表 2:
图表 3: