与 Nath 配合使用的定理解决方案

与 Nath 配合使用的定理解决方案

我想使用一些定理环境。但我正在使用包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}

相关内容