我有以下 MWE:
\documentclass{article}
\usepackage{amsthm}
\usepackage{hyperref}
\newtheorem*{definition}{Definition}
\begin{document}
\section{Section Definitions}
\begin{definition}[symmetric matrix]
\label{def:sym.mat}
A quadratic matrix $X$ is called \emph{symmetric}, if $X^{\dagger} = X$.
\end{definition}
This is a reference to \autoref{def:sym.mat}.
\end{document}
参考句子的输出是:
这是对第 1 节的引用。
我想要得到:
这是对定义(对称矩阵)的参考。
我知道如何用 aliascnt 包交叉引用不同的定理类环境,如引理、定理。但我的定义与定理不同,它们没有编号,而是在矩形括号中包含一个独特的短语,说明它们的定义。
有没有办法重载 \label 和 \ref 或 \autoref,以便显示的引用文本是环境名称(此处为“定义”)和可选参数(此处为“对称矩阵”)的组合?也许类似于这个答案LaTeX 中描述列表项的参考名称。
我想避免为每个定义环境定义手动参考显示文本。我想我必须以某种方式用 \thmnote 更新 \@currentlabel?
如果这个问题已经被问过并回答过,如果有人指出我,我会很高兴。
答案1
\autoref
通过告诉它定义了什么类型的引用来提供帮助。
需要一个新的计数器以便\autoref
将其用于其用途;接下来需要一个名称;然后当找到可选参数时计数器将被重新步进并且标签被设置为括号中的名称。
\documentclass{article}
\usepackage{amsthm}
\usepackage{xparse}
\usepackage{hyperref}
\newtheorem*{innerdefinition}{Definition}
\newcounter{definition}
\providecommand{\definitionname}{Definition}
\makeatletter
\NewDocumentEnvironment{definition}{o}
{%
\IfValueTF{#1}
{\innerdefinition[#1]\refstepcounter{definition}\def\@currentlabel{(#1)}}%
{\innerdefinition}%
}
{%
\endinnerdefinition
}
\makeatother
\begin{document}
\section{Section Definitions}
\begin{definition}[symmetric matrix]
\label{def:sym.mat}
A quadratic matrix $X$ is called \emph{symmetric}, if $X^{\dagger} = X$.
\end{definition}
This is a reference to \autoref{def:sym.mat}.
\end{document}
答案2
看起来 egreg 已经打败我了,但是这是一个类似的、稍微简单一些的解决方案:
\documentclass{amsart}
\textwidth=20cm\parindent=0pt
\usepackage{amsthm}
\usepackage[colorlinks]{hyperref}
\newtheorem*{definition}{Definition}
\makeatletter
\newenvironment{Definition}[1][\relax]%
{\ifx\relax#1\definition\def\@currentlabel{Definition}%
\else\definition[#1]\def\@currentlabel{Definition (#1)}%
\fi}
{\enddefinition}
\makeatother
\begin{document}
\begin{Definition}[symmetric matrix]
\label{def:sym.mat}
A quadratic matrix $X$ is called \emph{symmetric}, if $X^{\dagger} = X$.
\end{Definition}
This is a reference to \autoref{def:sym.mat}.
\end{document}
得出的结果为: