我想用定理 (推论、命题等) 的类型来引用我的定理。实际上,当我引用定理时,我必须输入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}