我用它cleveref
来交叉引用整个文档中的定理。但是,由于某些定理非常流行,我更喜欢用名称而不是定理编号来引用它们;但我仍然希望它们是可点击的,这样无论定理在哪里被提及,点击定理的名称都会直接带你到它那里。
为了创建自定义字符串,我实现了提供的解决方案这个答案,可以在下面的 MWE 中显示。
\documentclass{article}
\usepackage{amsthm, parskip, hyperref, cleveref}
% Theorems
\theoremstyle{definition}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{example}[theorem]{Example}
% Solution from https://tex.stackexchange.com/a/109864/78913
\makeatletter
\newcommand{\myref}[1]{\cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}
\newcommand{\Myref}[1]{\Cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}
\def\mynameref#1#2{%
\begingroup
\edef\@mytxt{#2}%
\edef\@mytst{\expandafter\@thirdoffive\@mytxt}%
\ifx\@mytst\empty\else
\space(\nameref{#1})\fi
\endgroup
}
\makeatother
\begin{document}
\section{Group Actions}
\begin{theorem}[Orbit-Stabiliser Theorem]
\label{thm:ost}
Let $G$ be a finite group acting on a finite set $X$. Then
\[|G| = \mathop{\mathrm{Orb}}(x) \times \mathop{\mathrm{Stab}}(x).\]
\end{theorem}
\begin{example}
Let $G$ act on $X$, where $|G| = 55$ and $|X| = 18$. Show that the action has at least two fixed points.
By the \nameref{thm:ost}, ...
\end{example}
\end{document}
此代码提供以下输出:
有没有办法可以更改标签,使文本变为小写?我尝试使用\MakeLowercase{}
,但没有成功。有没有办法可以修改标签?例如,如果我有“柯西定理”之类的东西,我希望它显示为“柯西定理”吨文本中的“定理”,用小写字母 表示t
。
我非常感谢您的帮助。
答案1
您必须明确告诉 LaTeX 定理名称如何大写。没有办法自动检测哪些词是专有名词,如“Cauchy”,应该保持大写。
按名称引用事物更属于该nameref
包的职责范围。Cleveref
涉及按其标签引用事物。但由于无论如何您都必须明确指定正确大写的定理名称,因此有一种方法可以做到这一点,而无需cleveref
付出太多额外的努力:
\documentclass{article}
\usepackage{amsthm, parskip, hyperref, cleveref}
% Theorems
\theoremstyle{definition}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{example}[theorem]{Example}
\begin{document}
\section{Group Actions}
\begin{theorem}[Orbit-Stabiliser Theorem]
\label{thm:ostnum}
\label[ost]{thm:ostname}
\crefformat{ost}{#2orbit-stabiliser theorem#3}
\Crefformat{ost}{#2Orbit-stabiliser theorem#3}
Let $G$ be a finite group acting on a finite set $X$. Then
\[|G| = \mathop{\mathrm{Orb}}(x) \times \mathop{\mathrm{Stab}}(x).\]
\end{theorem}
\begin{example}
Let $G$ act on $X$, where $|G| = 55$ and $|X| = 18$. Show that the action has at least two fixed points.
By the \cref{thm:ostname}, which is given in \cref{thm:ostnum}, \dots
\end{example}
\end{document}
这通过定义一个新的交叉引用类型ost
并告诉cleveref
使用正确大写的定理名称格式化对它的引用来实现。附加thm:ostnum
标签只是为了演示如何仍然可以通过其标签引用该定理(如果需要)。
如果您想经常这样做,可以通过将 \label、\crefformat、\Crefformat 甚至定理定义捆绑到新的宏或环境中来稍微整理一下。
答案2
crossreftools
几周前我编写了这个包(它在 CTAN、TeXLive 和 MikTeX 上可用,当前版本是 0.4),它提供了对hyperref
和存储的交叉引用信息的可扩展提取cleveref
。
\MakeLowercase
无法与 一起使用\nameref
,因为\nameref
不可扩展,因此必须先提取名称信息,然后应用\MakeLowercase
。
名称引用已使用 完成\crtrefname
,但这不会提供超链接,这将使整个问题再次无法展开。可以使用 提取超锚点\crtrefanchor
,并将其与\hyperlink
包装在新命令中,假设\lowernameref
这将提供小写标题。
请注意,这\lowernameref
当然是无法扩展的。
\documentclass{article}
\usepackage{amsthm, parskip, hyperref, cleveref}
\usepackage{crossreftools}
% Theorems
\theoremstyle{definition}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{example}[theorem]{Example}
% Solution from https://tex.stackexchange.com/a/109864/78913
\makeatletter
\newcommand{\myref}[1]{\cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}
\newcommand{\Myref}[1]{\Cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}
\newcommand{\lowernameref}[1]{\hyperlink{\crtrefanchor{#1}}{\MakeLowercase{\crtrefname{#1}}}}
\def\mynameref#1#2{%
\begingroup
\edef\@mytxt{#2}%
\edef\@mytst{\expandafter\@thirdoffive\@mytxt}%
\ifx\@mytst\empty\else
\space(\nameref{#1})\fi
\endgroup
}
\makeatother
\begin{document}
\section{Group Actions}
\begin{theorem}[Orbit-Stabiliser Theorem]
\label{thm:ost}
Let $G$ be a finite group acting on a finite set $X$. Then
\[|G| = \mathop{\mathrm{Orb}}(x) \times \mathop{\mathrm{Stab}}(x).\]
\end{theorem}
\begin{example}
Let $G$ act on $X$, where $|G| = 55$ and $|X| = 18$. Show that the action has at least two fixed points.
By the \lowernameref{thm:ost}, ...
\end{example}
\end{document}