附录作为章节末尾的章节存在目录问题

附录作为章节末尾的章节存在目录问题

我在第一章的末尾有一个附录(部分),如下所示

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。 的默认值为numwidth2.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:

方程式的超链接

相关内容