Nameref 不适用于 StylishArticle

Nameref 不适用于 StylishArticle

我已经使用了时尚文章类,但我最近认为根据章节名称来引用章节而不是使用章节编号或 是一个好主意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

来自hyperrefREADME

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

相关内容