ref 引用了正确的数字,但 nameref 使用了错误的名称

ref 引用了正确的数字,但 nameref 使用了错误的名称

这是我的第一个问题,所以如果缺少详细信息或者我的问题可以写得更清楚,我很抱歉。任何帮助都将不胜感激。

我想使用 hyperref 来引用我的一个附录的名称,这样我就可以写:

...detailed information is found in \nameref{App:B}

结果是

...detailed information is found in Appendix B - Matlab Code

问题是,我的附录没有编号,所以我使用 \refstepcounter 手动增加章节计数器。现在,当我使用 \ref 引用附录时,输出的编号是正确的,但当使用 \nameref 时,编译的名称是最后一个编号的章节。

我已经将问题范围缩小到与 \refstepcounter 重新定义 \ @currentlabel 有关,但即便如此,我仍然很难理解 \refstepcounter 对我的 \label 所做的确切细节以及如何修复它。

我当前的代码是这样说的

\documentclass[a4paper,11pt]{scrreprt}
\begin{document}

\usepackage{hyperref}

\chapter{Some numbered chapter}


\chapter*{Appendix B - Matlab Code}
\refstepcounter{chapter}\label{App:B}
\addcontentsline{toc}{chapter}{Appendix B - Matlab Code}

答案1

您的主要问题是,您试图使用未编号章节的命令来伪造编号章节。相反,您应该使用\chapter{…}并配置输出以达到您想要的效果。例如:

\documentclass{scrreprt}
\usepackage{hyperref}

\newcommand*{\tocchapapp}{}
\AddToHook{scrreprt/appendix}{%
  % Code from https://sf.net/p/koma-script/wiki-en/HowTo_TocAppendixPrefix/
  \renewcommand*{\tocchapapp}{\chapapp\ }%
  \addtocontents{\csname ext@toc\endcsname}{%
    \string\DeclareTOCStyleEntry[numwidth+=5em]{chapter}{chapter}%
  }%
  % Additionally add the prefix to the format of the headings:
  \renewcommand*{\chapterformat}{\appendixname\ \thechapter\ --\ }%
  % and the format of the running heads:
  \renewcommand*{\chaptermarkformat}{\appendixname\ \thechapter\ --\ }%
}
% Again Code from https://sf.net/p/koma-script/wiki-en/HowTo_TocAppendixPrefix/
\renewcommand*{\addchaptertocentry}[2]{%
  \IfArgIsEmpty{#1}{% keine Nummer:
    \addtocentrydefault{chapter}{#1}{#2}% wie bisher
  }{% mit Nummer:
    \addtocentrydefault{chapter}{\tocchapapp#1}{#2}%
  }%
}

\begin{document}

\tableofcontents

\chapter{Some numbered chapter}
See \autoref{App:B}: \nameref{App:B}

\appendix
\chapter{Matlab Code}
\label{App:B}
\end{document}

目录、一个章节和一个附录章节

相关内容