我想使用一些定理环境。但我正在使用包nath
,不幸的是,它与我找到的每个解决方案都不兼容。我不需要任何花哨的东西,只需要以下功能:
(基本)自动对定理进行编号,并能够重新定义“定理”、“引理”等词语,因为我不是用英语写的。
(需要)能够引用定理,以便
\magicref{that-first-lemma-of-section1}
产生“引理 1.1”而不仅仅是“1.1”。(可选)能够为重要的结果命名,从而
\magicref{very-important-named-theorem}
产生“Pi 定理”而不是“定理 3.1.4”。(可选)我甚至不知道这个接口到底是什么,但经常看到“定理 2.71”定义一些特殊对象的文本,就像
\psi_{2.7.1}
其他地方引用的那样。我希望以一种简单的方式做到这一点。
答案1
ntheorem
通过定义 可以实现对定理名称和包的引用\p@<counter>
。它为引用中使用的计数器值添加前缀。
\documentclass{article}
\usepackage{ntheorem}
\newtheorem{lemma}{Lemma}
\makeatletter
\renewcommand*{\p@lemma}{Lemma~}
\makeatother
\begin{document}
\section{Test document}
\begin{lemma}
\label{first}
This is the first lemma.
\end{lemma}
\begin{lemma}[Pi's Lemma]
\label{pi}
This is a named lemma.
\end{lemma}
References: \ref{first} and \ref{pi}.
\end{document}
- 可以通过包 来引用定理的标题
nameref
。但是,nameref
目前尚不支持ntheorem
的定理。因此,对内部进行了修补,通过定义 将标题添加到引用中\@currentlabelname
。对于未命名的定理,将定理名称和编号用作 的标题\nameref
。因此,示例文件不会重新定义\p@<counter>
,以保留仅获取编号的方法。
\documentclass{article}
\usepackage{ntheorem}
\usepackage{nameref}
\usepackage{gettitlestring}% also used by nameref 2009/12/08 or later
\makeatletter
\@ifdefinable{\saved@ythm}{%
\let\saved@ythm\@ythm
\def\@ythm#1#2#3[#4]{%
\GetTitleString{#4}%
\let\@currentlabelname\GetTitleStringResult
\saved@ythm{#1}{#2}{#3}[{#4}]%
}%
}
\@ifdefinable{\saved@xthm}{%
\let\saved@xthm\@xthm
\def\@xthm#1#2#3{%
\protected@edef\@currentlabelname{%
#3~\csname the#2\endcsname
}%
\saved@xthm{#1}{#2}{#3}%
}%
}
\makeatother
\newtheorem{lemma}{Lemma}
\begin{document}
\section{Test document}
\begin{lemma}
\label{first}
This is the first lemma.
\end{lemma}
\begin{lemma}[Pi's Lemma]
\label{pi}
This is a named lemma.
\end{lemma}
References via \verb|\ref|: \ref{first} and \ref{pi}.
References via \verb|\nameref|: \nameref{first} and \nameref{pi}.
\end{document}
答案2
“不是每个解决方案都有效”?以哪种方式?
编译得很好(TUG TeX Live 2012 冻结)
\documentclass[a4paper]{article}
\usepackage{amsthm,nath}
\newtheorem{test}{Test}
\begin{document}
\begin{test}
$$(\sum_i f_i(x)) $$
\end{test}
\end{document}