使用 scrbook 在“A”前添加“附录”

使用 scrbook 在“A”前添加“附录”

我正在写论文,需要在目录 (TOC)、章节标题和页眉中的编号 (A、B、C、...) 之前添加“附录”。我还想\autoref{}输出“附录 A”。

我正在使用 scrbook 类并尝试了几种不同的方法来实现这一点,但没有一种方法能给我想要的输出。

我希望标题显示如下,即“附录 A(标题)”。这也是我希望它在目录和标题中显示的方式。

附录标题

我尝试使用 KOMA 选项appendixprefix=true,但是这会将附录 A 和更多信息分成不同的行,并且不会在目录中将“附录”放在 A 之前。

我尝试重新定义\thechapter,以便\renewcommand{\thechapter}{Appendix \Alph{chapter}在文档的标题和页眉中获得所需的输出,但目录输出在下面,而\autoref{}的输出是“附录附录 A”。

TOC输出

我也尝试过附录包,但是它不会将附录添加到正文的标题中,只会添加到目录中。

我还尝试了一些其他的技巧,这些技巧在目录和标题中都有效,但在标题中显示前一章。

我使用以下内容设置标题

\usepackage{fancyhdr}

\setlength{\headheight}{15pt}

\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{ \markboth{\thechapter~#1}{} } % Adds chapter number name to right header
\renewcommand{\sectionmark}[1]{ \markright{\thesection~#1}{} } % Adds section name to left header

我真的很感激对此的一些帮助,因为我找不到使用 scrbook 类的适用于我的 3 个主要情况(标题、目录和页眉)的解决方案。

梅威瑟:

\documentclass[12pt,a4paper,oneside,pointlessnumbers]{scrbook}

\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{fancyhdr}
\usepackage[colorlinks]{hyperref}

\setlength{\headheight}{15pt}

\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{ \markboth{\thechapter~#1}{} }
\renewcommand{\sectionmark}[1]{ \markright{\thesection~#1}{} } 

\begin{document}

\frontmatter
\tableofcontents

\mainmatter
\blinddocument

\appendix

\chapter{More Information} \label{app:first}
\section{Another Section}
\autoref{app:first} 
\Blindtext

\end{document}

答案1

将以下几行添加到你的序言中:

\makeatletter
\g@addto@macro\appendix{%
  \renewcommand*{\chapterformat}{%
    {\chapapp\nobreakspace\thechapter\autodot\enskip}%
  }
  \renewcommand*{\chaptermarkformat}{%
    {\chapapp\nobreakspace\thechapter\autodot\enskip}%
  }
  \let\oldaddcontentsline\addcontentsline
  \newcommand\hackedaddcontentsline[3]{\oldaddcontentsline{#1}{#2}{\chapapp\nobreakspace#3}}
  \let\oldchapter\chapter
  \renewcommand*\chapter[1]{%
    \let\addcontentsline\hackedaddcontentsline%
    \oldchapter{#1}%
    \let\addcontentsline\oldaddcontentsline%
  }
}
\makeatother

我们\g@addto@macro在命令中添加\appendix以下修改:

  1. 我们重新定义\chapterformat,在章节号前添加“附录”字样。
  2. 我们重新定义\chaptermarkformat,在页眉的章节号前添加“附录”字样。
  3. \addcontentsline代码的其余部分仅针对命令重新定义了含义\chapter,因此也在目录中添加了“附录”一词。

该命令\autoref按预期工作。

梅威瑟:

\documentclass[numbers=noenddot]{scrbook}
\usepackage[colorlinks]{hyperref}

\makeatletter
\g@addto@macro\appendix{%
  \renewcommand*{\chapterformat}{%
    {\chapapp\nobreakspace\thechapter\autodot\enskip}%
  }
  \renewcommand*{\chaptermarkformat}{%
    {\chapapp\nobreakspace\thechapter\autodot\enskip}%
  }
  \let\oldaddcontentsline\addcontentsline
  \newcommand\hackedaddcontentsline[3]{\oldaddcontentsline{#1}{#2}{\chapapp\nobreakspace#3}}
  \let\oldchapter\chapter
  \renewcommand*\chapter[1]{%
    \let\addcontentsline\hackedaddcontentsline%
    \oldchapter{#1}%
    \let\addcontentsline\oldaddcontentsline%
  }
}
\makeatother

\begin{document}

\tableofcontents

\chapter{1st chapter}
\section{1st section}
\chapter{2nd chapter}
\section{2nd section}

\appendix

\chapter{1st appendix chapter}\label{app:first}
\section{1st appendix section}
\chapter{2nd appendix chapter}
\section{2nd appendix section}
\autoref{app:first}

\end{document} 

输出 (ToC)

在此处输入图片描述

输出(附录)

在此处输入图片描述

答案2

更新使用 LaTeX 版本 2021/06/01 和 KOMA-Script 版本 3.34:

\documentclass[
  oneside,
  numbers=noenddot
]{scrbook}
\usepackage{blindtext}% dummy text
\usepackage{biblatex}
\usepackage[colorlinks]{hyperref}

\AddToHook{cmd/appendix/after}{%
  \AddToHook{cmd/chapterformat/before}{\chapapp\nobreakspace}%
  \AddToHook{cmd/chaptermarkformat/before}{\chapapp\nobreakspace}%
  \addtocontents{toc}{\appendixtocentry}%
}

\NewDocumentCommand{\appendixtocentry}{}{%
  \DeclareTOCStyleEntry[
    entrynumberformat=\tocappendixnumber,
    dynnumwidth
  ]{chapter}{chapter}%
}
\NewDocumentCommand{\tocappendixnumber}{m}{%
  \appendixname~#1%
}

\addbibresource{biblatex-examples.bib}
\begin{document}
\tableofcontents
\blinddocument
\appendix
\chapter{First chapter in appendix}\label{app:first}
\section{Section in appendix}
See \autoref{app:first}

\Blindtext[10]
\blinddocument

\nocite{*}
\printbibliography[heading=bibintoc]
\end{document}

运行三次即可获得

在此处输入图片描述

在此处输入图片描述


更新使用(最终版本)TL2018 或更新版本:

\documentclass[
  oneside,
  numbers=noenddot,
  appendixprefix
]{scrbook}
\usepackage{blindtext}% dummy text

\usepackage{xpatch}
\xapptocmd{\appendix}{%
  \renewcommand*{\chapterformat}{\chapapp\nobreakspace\thechapter\autodot\enskip}%
  \renewcommand*{\chaptermarkformat}{\chapapp\nobreakspace\thechapter\autodot\enskip}%
  \addtocontents{toc}{%
    \RedeclareSectionCommand[
      tocdynnumwidth,
      tocentrynumberformat=\tocappendixnumber
    ]{chapter}%
  }%
}{}{\PatchFailed}
\newcommand\tocappendixnumber[1]{\chapapp~#1}

\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage[colorlinks]{hyperref}

\begin{document}
\tableofcontents
\blinddocument
\appendix
\chapter{First chapter in appendix}\label{app:first}
\section{Section in appendix}
See \autoref{app:first}

\Blindtext[10]
\blinddocument

\nocite{*}
\printbibliography[heading=bibintoc]
\end{document}

运行三次即可获得

在此处输入图片描述

在此处输入图片描述


原始答案

以下是需要 KOMA-Script 版本 3.20 或更新版本的建议:

\documentclass[
  oneside,
  numbers=noenddot,
  appendixprefix
]{scrbook}[2016/05/10]% needs version 3.20 or newer
\usepackage{blindtext}% dummy text

\usepackage{xpatch}
\xapptocmd{\appendix}{%
  \addtocontents{toc}{%
    \RedeclareSectionCommand[
      tocdynnumwidth,
      tocentrynumberformat=\tocappendixnumber
    ]{chapter}%
  }%
}{}{\PatchFailed}
\newcommand\tocappendixnumber[1]{\chapapp~#1}

\usepackage{hyperref}
\begin{document}
\tableofcontents
\blinddocument
\appendix
\chapter{First chapter in appendix}\label{app:first}
\section{Section in appendix}
See \autoref{app:first}

\Blindtext[10]
\blinddocument
\end{document}

运行三次得到:

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案3

对于表单中的标题Appendix A (title)和中的条目的格式TOC,有一个“快速而肮脏”的解决方案,通过重新定义命令section,但这不是\autoref问题。

\documentclass{scrbook}
\usepackage[manualmark]{scrpage2}
\usepackage{blindtext}   % Not really needed
\usepackage{hyperref}


\newcommand*{\CurrentSectionTitle}[1]{#1}%



\begin{document}

\tableofcontents

\chapter{Some Content}

\section{Hello}
In \autoref{Section::NumberTwo} it is shown that \[ E = m c^2 \]

\section{Hello Again}
\label{Section::NumberTwo}%
In \autoref{Appendix::B} it is shown again that \[ E = m c^2 \]
holds.

\cleardoublepage


%%%% Now appendix stuff

% Set counter format to letters

\renewcommand{\thesection}{\Alph{section}}


\let\LaTeXStandardSection\section

% Quick and dirty version of a `section wrapper`
\renewcommand*{\section}[1]{%  Does not work if optional argument is desired!
\renewcommand*{\CurrentSectionTitle}{#1}%
\refstepcounter{section}%  Needed, since starred version of section command (see below)
\addcontentsline{toc}{chapter}{\protect{\appendixname~\thesection~\CurrentSectionTitle}} % Change if not appropiate format
%Prevent entry with number in TOC, since starred version of standard section command
\LaTeXStandardSection*{\appendixname~\thesection~\CurrentSectionTitle}%  
}%

\pagestyle{scrheadings}


\appendix 
\section{Number One} 
\blindtext[5] % Some dummy text
\section{Number Two} 
\label{Appendix::B}
\blindtext
\section{Number Three} 
\blindtext

\end{document}

在此处输入图片描述 三个附录的缩小版截图,单列格式

如上所述,这是一个快速而肮脏的解决方案,也许有比重新定义部分命令更好的方法(在我的情况下没有完全完成,因为它不允许使用TOC短标题)

关于\autoref,有一个\sectionautorefname命令可以重新定义为

\renewcommand*{\sectionautorefname}{\appendixname}

但是,之后每次出现节自动引用时都会用到它。到目前为止,我还没有找到绕过这个问题的解决方案。

相关内容