我正在使用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命令引用环境,而不是引用它所在的部分/章节。)
答案 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
有效,但展示了此主题中讨论的错误。
更新:对于最小的示例(我检查过),不需要此解决方法。我不知道我的样式文件中是否有更复杂的内容,但如果我发现某些内容,我会更新它。这可能仍然可以帮助遇到同样问题的人。