仅通过名称引用定理

仅通过名称引用定理

我想知道我是否可以有一个命名的定理(没有数字),并且仍然用打印的名称来称呼它。以下是序言中的代码,以便我可以给定理命名。(我从另一篇文章中获得了此代码)。

\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}

命名定理交叉引用

相关内容