![ref 引用了正确的数字,但 nameref 使用了错误的名称](https://linux22.com/image/464016/ref%20%E5%BC%95%E7%94%A8%E4%BA%86%E6%AD%A3%E7%A1%AE%E7%9A%84%E6%95%B0%E5%AD%97%EF%BC%8C%E4%BD%86%20nameref%20%E4%BD%BF%E7%94%A8%E4%BA%86%E9%94%99%E8%AF%AF%E7%9A%84%E5%90%8D%E7%A7%B0.png)
这是我的第一个问题,所以如果缺少详细信息或者我的问题可以写得更清楚,我很抱歉。任何帮助都将不胜感激。
我想使用 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}