我已经使用了时尚文章类,但我最近认为根据章节名称来引用章节而不是使用章节编号或 是一个好主意pageref
。
所以我定义了\newcommand{\appref}[1]{Appendix:\nameref{#1}}
使用\subsection*
(未编号),并用普通文章类进行了测试。似乎运行良好。
然而,当我将它与 StylishArticle 一起使用时,它似乎效果不太好,并且我收到一条警告:
Package hyperref Warning: Suppressing empty link on input line 86.
此链接会带您进入 Overleaf 文档(只读),您可以自己查看。我尝试将示例保持较小,但我认为它不够小;我需要帮助来确定导致此问题的原因。任何帮助都非常感谢!
根据@egreg 的建议,这里有一个更短的 MWE:
\documentclass[12pt]{article}
\usepackage{titlesec}
\usepackage[unicode=true]{hyperref}
\newcommand{\appref}[1]{Appendix:\nameref{#1}}
\begin{document}
\section{A normal section}
Reference to \appref{app}.
\phantomsection
\section*{Appendices}
\label{app}
\addcontentsline{toc}{section}{Appendices}
\end{document}
答案1
来自hyperref
README
:
titlesec
nameref
支持titlesec
,但hyperref
不支持(未解决的是锚点设置,未编号部分缺失,编号部分的分页符可能存在问题)。
答案2
就像@egreg 的回答,以下定义对我来说就是这样的,尽管这意味着使用\appsubsec{name}{app:label}
而不是通常的\subsection*{name}\label{app:label}
。
\makeatletter
\newcommand{\appsec}[2]{%
\phantomsection
\refstepcounter{section}%
\section*{#1}%
\addtocounter{section}{-1}%
\def\@currentlabelname{App: #1}%
\def\@currentlabel{\thesection}%
\label{#2}%
\addcontentsline{toc}{section}{#1}%
}
\newcommand{\appsubsec}[2]{%
\refstepcounter{subsection}%
\subsection*{#1}%
\addtocounter{subsection}{-1}%
\def\@currentlabelname{App: #1}%
\def\@currentlabel{\thesubsection}%
\label{#2}%
}
\newcommand{\appsubsubsec}[2]{%
\refstepcounter{subsubsection}%
\subsubsection*{#1}%
\addtocounter{subsubsection}{-1}%
\def\@currentlabelname{App: #1}%
\def\@currentlabel{\thesubsubsection}%
\label{#2}%
}
\makeatother
这些命令确保只有appsec
(相当于section*
)被输入到目录中,这样您只能看到一个条目Appendices
(应该在您的文档中定义以标记附录的开始),而不是将每个附录列为普通小节。
请注意这些命令要求一个标签(第二个输入不是可选的),并且\nameref{app:label}
在您的文档中调用将产生一个带有文本的链接App: name
。