通过其[名称]引用类似定理的环境

时间:2010-05-04 17:12:49

标签: latex

我正在使用n定理来排版一组条件。在我的序言中,我有:

\theoremstyle{empty}
\newtheorem{Condtion}{Condtion}

当我想排版一个条件时,我写道:

\begin{Condtion}[name]
\label{cnd:nm}
foo foo foo
\end{Condition}

名称在条件文本开头的同一行显示粗体,没有数字或任何内容。完美。

我现在要做的是通过\ref命令的某些变体引用条件, \ ref调用号码[在其他地方没有显示] \ thref为第n个条件写入“Condition n” \ nameref写入标签的SECTION名称。 建议使用zref解决方案here,但似乎并不令人满意并且难以理解。

有关简单方法的任何建议吗? (即使是更简单的zref解决方案也会很好)目前我已经为每个条件定义了\newcommand并使用它而不是引用条件本身。这在语义上是不透明的,只是不满意......

(编辑:我通过电子邮件发送了一位n定理的作者Wolfgang May,他解释说在n定理中没有办法实现这一点,因为没有记录[name]选项。)

(编辑:这不是评论中建议的欺骗,因为我有兴趣通过其可选的name命令引用环境,而不是引用它所在的部分/章节。)

4 个答案:

答案 0 :(得分:9)

我认为以下可能会做你想要的。

\makeatletter
\def\namedlabel#1#2{\begingroup
   \def\@currentlabel{#2}%
   \label{#1}\endgroup
}
\makeatother

然后你用它作为

\begin{theorem}
  \namedlabel{thm:seamus}{Seamus' Theorem}
  Here is Seamus' Theorem.
\end{theorem}

Here I reference~\ref{thm:seamus}.

不幸的是,它只能通过名称引用,但我想你也可以使用普通\label(当然使用不同的键)。

对于amsthm环境,您可以使用

\makeatletter
\let\@old@begintheorem=\@begintheorem
\def\@begintheorem#1#2[#3]{%
  \gdef\@thm@name{#3}%
  \@old@begintheorem{#1}{#2}[#3]%
}
\def\namedthmlabel#1{\begingroup
   \edef\@currentlabel{\@thm@name}%
   \label{#1}\endgroup
}
\makeatother

答案 1 :(得分:3)

  

nameref不起作用:它引用类似定理环境的SECTION标题。

这是一个已经修复的 nameref错误http://web.archiveorange.com/archive/v/9uUx5EuqoCGynIvx3om7#lY2MJxvge2oMgOi

不幸的是,像Debian / Ubuntu这样的Linux发行版附带了可怕的旧版软件包(Ubuntu 11.04仍然出货TeX Live 2009,尽管最新版本是TeX Live 2011)。如果您正在使用这样的Linux发行版停止使用发行版中的Tex Live软件包,并直接从此处安装TeX Live:http://www.tug.org/texlive/您可以使用tlmgr更新软件包(这是一个非常酷的工具,不附带于Debian / Ubuntu)。

答案 2 :(得分:2)

您可能需要查看与{em}一起分发的nameref包。 nameref文档中有一节介绍了“东西”:http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=nameref

有关引用的更多信息: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=nameref

答案 3 :(得分:0)

我认为其他人可能会觉得这很有帮助。即使我安装了更新的hyperref软件包,我也必须在\usepackage{nameref}之后明确调用\usepackage{hyperref},以便从\nameref获取正确的行为。如果没有对\usepackage{nameref}的显式调用,\nameref有效,但展示了此主题中讨论的错误。

更新:对于最小的示例(我检查过),不需要此解决方法。我不知道我的样式文件中是否有更复杂的内容,但如果我发现某些内容,我会更新它。这可能仍然可以帮助遇到同样问题的人。