假设我正在编写一个.sty
供人们使用的。它.sty
可能在之前或之后加载hyperref
,也可能在其他一些包将 、 等定义为小写名称之前\chaptername
加载\chapterautorefname
(\sectionname
实际上,它们可能不这样做,但我希望它更强大)。
我应该如何强制这些名称的大写(即\autoref{chap:foo}
生成“第 2 章”而不是“第 3 章”)?
答案1
为了提高对用户干扰的鲁棒性,我建议你不要使用机器\autoref
。相反,我建议你使用聪明人包及其用户级宏\cref
。
可能类似于以下内容。首先,创建一个.sty
名为的文件myrefs.sty
。
\ProvidesPackage{myrefs}[2019/05/31 einpoklum's helper style file]
\RequirePackage{hyperref}
\hypersetup{colorlinks,allcolors=blue} % or whatever options are needed
\RequirePackage[nameinlink]{cleveref} % 'nameinlink' to mimic \autoref's behavior
%% Use low-level controls to hard-code the required appearance.
\crefname{chapter}{Chapter}{Chapters}
\crefname{section}{Section}{Sections}
\crefname{equation}{Equation}{Equations}
% etc
\let\autoref\cref % set \autoref as an alias for \cref
\endinput
然后,在 tex 文件的前言中加载样式文件,并使用\autoref
或\cref
创建交叉引用。当然,你仍然应该建议你的包的用户 (a)不是加载hyperref
包和(b)加载myrefs
包最后的。
\documentclass{report}
\usepackage{myrefs}
\begin{document}
\chapter{AAA} \label{chap:aaa}
\section{BBB} \label{sec:bbb}
\begin{equation}1+1=2\label{eq:triv}\end{equation}
Cross-references to \autoref{chap:aaa,sec:bbb,eq:triv}.
\end{document}