引用定理(同时包括定理标题)

引用定理(同时包括定理标题)

我想用定理 (推论、命题等) 的类型来引用我的定理。实际上,当我引用定理时,我必须输入Theorem \ref{name}。我在一些论文中看到,可以避免使用“定理”,而只需输入\ref{name}。由于我使用 ntheorem,因此 Cleveref 效果不佳。

但我在这里找到了解决方案cleveref 用于相同类型的定理

对于 ntheorem 的用户来说。然而,它在以下最小示例中运行不佳,我无法找到错误。

\documentclass[10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}  
\usepackage{color}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{mathptmx} % Times
\usepackage[scaled=0.90]{helvet}  % Helvetica, scaled 92%
\usepackage{courier}
\setlength{\parindent}{0cm}
\usepackage[all]{xy}
\usepackage{enumitem}
\usepackage[a4paper,twoside]{geometry}
\usepackage{amsmath,amssymb,mathrsfs}%symboles maths,polices loc différentes 
\usepackage[colorlinks=true,linkcolor=blue,citecolor=red,backref=page]{hyperref}


%Théorèmes
\usepackage[hyperref]{ntheorem}
\usepackage[nameinlink]{cleveref}


{\theoremheaderfont{\scshape}
\theorembodyfont{\itshape}
\theoremindent0cm
\theorempreskip{0.8cm}
\theorempostskip{0.8cm}
\newtheorem{theo}{Theorem –}[section]
\crefname{theo}{Theorem}{Theorems}
\crefalias{theo}{Theorem}}

\begin{document}
\hypersetup{colorlinks,citecolor=Green,linkcolor=Red, urlcolor=Green}


\begin{theo}[Existence and uniqueness (1)]\label{existuniq1}
Let $m >1$. 

\end{theo}


 \cref{existuniq1}

\end{document}

在此处输入图片描述

答案1

令人惊讶的是,似乎这个非常基本的问题还没有以这种形式在这里被提出过。所以这里有一个答案:

一个选择可能是cleveref包裹。

cleveref 包增强了 LATEX 的交叉引用功能,允许根据交叉引用的“类型”(方程式、章节等)和使用交叉引用的上下文自动确定交叉引用的格式。

(摘自包装文档)

cleveref软件包甚至可能是最佳选择。它在大多数情况下表现良好,例如,@barbarabeeton 提到的问题可以轻松使用 进行修复cleveref

假设你设置了一个定理环境

\usepackage{amsthm}
  \newtheorem{theorem}{Theorem}

然后您可以使用命令引用它(获得定理标题“免费”)\cref。(theorem环境也可以通过 定义ntheorem。)

\begin{theorem}\label{thm:foo}
Foo bar.
\end{theorem}

\cref{thm:foo}

展示

切换“capitalize”选项时,cpation 排版为大写。链接是使用hyperref选项“colorlinks”和“linkcolor=DeepSkyBlue2”生成的,其中“DeepSkyBlue2”是x11names的颜色xcolor。最后,您需要指定“nameinlink”选项,cleveref以使参考完全着色。

\documentclass{article}
\usepackage{amsthm}
  \newtheorem{theorem}{Theorem}
\usepackage[x11names]{xcolor}
\usepackage[linkcolor=DeepSkyBlue2,colorlinks]{hyperref}
\usepackage[capitalize,nameinlink]{cleveref}

\begin{document}
\begin{theorem}\label{thm:foo}
Foo bar.
\end{theorem}

\cref{thm:foo}
\end{document}

答案2

这不完全是最小工作示例...(参见[1].

无论如何,问题是你把这些线括起来了

{\theoremheaderfont{\scshape}
\theorembodyfont{\itshape}
\theoremindent0cm
\theorempreskip{0.8cm}
\theorempostskip{0.8cm}
\newtheorem{theo}{Theorem –}[section]
\crefname{theo}{Theorem}{Theorems}
\crefalias{theo}{Theorem}}

括号中,从而形成一个组。这意味着在这个组内做出的任何定义都将当地的(即仅在组内可见),除非指定应定义全球的。 [2]

以上内容指的是 TeX 裸定义,即、\def等。包含的软件包中的更高级 LaTeX 命令还可以定义各种宏,这些宏可能是本地的或全局的,具体取决于软件包的实现。显然,像 这样的命令是全局的,但是是本地的。\edef\let\newtheorem\crefname

删除花括号即可使代码正常运行:

\theoremheaderfont{\scshape}
\theorembodyfont{\itshape}
\theoremindent0cm
\theorempreskip{0.8cm}
\theorempostskip{0.8cm}
\newtheorem{theo}{Theorem –}[section]
\crefname{theo}{Theorem}{Theorems}
\crefalias{theo}{Theorem}

相关内容