确保所有自动引用名称都大写的“正确”方法是什么?

确保所有自动引用名称都大写的“正确”方法是什么?

假设我正在编写一个.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}

相关内容