![仅通过名称引用定理](https://linux22.com/image/467740/%E4%BB%85%E9%80%9A%E8%BF%87%E5%90%8D%E7%A7%B0%E5%BC%95%E7%94%A8%E5%AE%9A%E7%90%86.png)
我想知道我是否可以有一个命名的定理(没有数字),并且仍然用打印的名称来称呼它。以下是序言中的代码,以便我可以给定理命名。(我从另一篇文章中获得了此代码)。
\theoremstyle{definition}
\newcommand{\thistheoremname}{}
\newtheorem{genericthm}[thm]{\thistheoremname}
\newenvironment{namedthm}[1]
{\renewcommand{\thistheoremname}{#1}%
\begin{genericthm}}
{\end{genericthm}}
\newtheorem*{genericthm*}{\thistheoremname}
\newenvironment{namedthm*}[1]
{\renewcommand{\thistheoremname}{#1}%
\begin{genericthm*}}
{\end{genericthm*}}
以下是我希望该定理表达的内容。请注意,我使用了 namedthm*,因此不会出现数字。
\begin{namedthm*}{Theorem A}\label{theoremA} Some text.
\end{namedthm*}
当我使用定理 \ref{theoremA} 时,它不会打印定理 A。有什么方法可以打印它吗?
先感谢您。
答案1
使用虚拟计数器并使其表示为\thistheoremname
。
\documentclass{article}
\usepackage{amsthm}
\usepackage{hyperref}
\newtheorem*{genericthm*}{\thistheoremname}
\newcommand{\thistheoremname}{???}% initialize
\newcounter{genericthm}
\renewcommand{\thegenericthm}{\thistheoremname}
\newenvironment{namedthm*}[1]
{\renewcommand{\thistheoremname}{#1}%
\refstepcounter{genericthm}%
\begin{genericthm*}}
{\end{genericthm*}}
\begin{document}
\begin{namedthm*}{Theorem A}\label{theoremA}
Some text.
\end{namedthm*}
\ref{theoremA}
\end{document}
请注意,这hyperref
不是必需的;我在示例中加载它只是为了检查兼容性。
让我们检查一下该链接是否确实正确:我使用的 PDF 查看器在将鼠标悬停在链接上时会显示链接指向的文本的缩小图像。
答案2
如果您愿意使用方法来thmtools
创建类似定理的环境,那么结合cleveref
和也crossreftools
可以得到看似等效的结果。
\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\makeatletter
\declaretheoremstyle[
headfont=\sffamily\bfseries,
postheadspace=0.5em,
bodyfont=\slshape,
]{thmstyle}
\declaretheoremstyle[
headfont=\sffamily\bfseries,
postheadspace=0.5em,
notefont=\sffamily\bfseries,
notebraces={}{},
headformat=\let\thmt@space\@empty\NOTE,
bodyfont=\slshape,
]{namedthmstyle}
\makeatother
\declaretheorem[name=Theorem, style=thmstyle]{theorem}
\declaretheorem[
style=namedthmstyle,
name=Theorem,
title = {},
numberlike=theorem,
]{namedtheorem}
\usepackage{hyperref}
\usepackage{cleveref}
\Crefname{theorem}{Theorem}{Theorems}
\usepackage{crossreftools}
\newcommand{\crefthm}[1]{\hyperlink{\crtrefanchor{#1}}{\crtrefname{#1}}}
\begin{document}
\begin{theorem}\label{thm:one}
$1+1 = 2$.
\end{theorem}
\begin{namedtheorem}[Pythagorean theorem]\label{thm:pythagoras}
The square on the hypotenuse of a right triangle equals the sum of the squares on th eother two sides.
\end{namedtheorem}
\begin{theorem}\label{thm:two}
$0 < 1$.
\end{theorem}
Consult \cref{thm:one}, \crefthm{thm:pythagoras}, and \cref{thm:two}.
\end{document}