2010-05-04 27 views
5

我使用ntheorem來排版一組條件。在我的序言,我有:引用一個類似於定理的環境[名稱]

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

當我想要排版的條件,我寫:

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

名稱出現黑體字在同一行作爲條件的文本的開始,與沒有數字或任何東西。完善。

我想現在要做的是通過\ref命令的一些變種參考條件, \裁判調用[未顯示任何地方]數 \ THREF第n個條件 寫道:「條件N」 \ nameref寫入標籤SECTION的名稱。 zref解決方案建議here,但似乎不盡如人意。

任何建議在一個簡單的方法來做到這一點? (即使更簡單的zref解決方案也不錯)目前,我剛剛爲每個條件定義了一個\newcommand,並且使用它而不是引用條件本身。這在語義上是不透明的,只是令人不滿意...

(編輯:我給ntheorem的一位作者Wolfgang May發了一封電子郵件,他解釋說在ntheorem中沒有辦法做到這一點,因爲[name]選項沒有被記錄。)

(編輯:這不是一個愚蠢的建議在評論中,因爲我有興趣通過其可選的命令引用一個環境,而不是引用它所在的部分/章節。 )

+1

檢查http://stackoverflow.com/questions/1491842/references-with-text-in-latex哪些*可能是一個有效的副本。還有http://stackoverflow.com/questions/2613506/ref-chapter-name-in-latex和東西從那裏鏈接。 – dmckee 2010-05-04 18:07:55

+0

zref可以工作,但它似乎是一個非常複雜的做事方式。我的意思是,[名稱]已經在環境開始時宣佈。我只是想通過它的名字來叫它,而不是它的號碼... – Seamus 2010-05-05 15:07:43

回答

7

我認爲有以下可以做你想做的。

\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\@[email protected]=\@begintheorem 
\def\@begintheorem#1#2[#3]{% 
    \gdef\@[email protected]{#3}% 
    \@[email protected]{#1}{#2}[#3]% 
} 
\def\namedthmlabel#1{\begingroup 
    \edef\@currentlabel{\@[email protected]}% 
    \label{#1}\endgroup 
} 
\makeatother 
+0

那種作品。但它仍然不理想。關鍵是,我想使用條件的可選參數的內容作爲我所調用的名稱。所以我有'\ begin {Condition} [Cnd Name]'',並且我希望有一個標籤,當我'ref'時,說出「Cnd Name」,粗體就像條件第一次寫出時一樣。這樣,我必須添加一個額外的參數到標籤,並確保它匹配「Cnd Name」... – Seamus 2010-07-22 11:22:21

+0

這將取決於使用的環境。您可能必須爲每個這樣的環境創建一個包裝器,因爲其中大多數可能不會將這些信息保存在任何地方。如果你想要的只是針對amsthm環境,我已經添加了答案。 – 2010-07-23 07:31:00

+0

好的,謝謝。我會稍後再嘗試。 ntheorem會有類似的功能嗎? – Seamus 2010-07-23 13:36:10

3

nameref不起作用:它引用的定理般的環境出現在節的標題

這是一個nameref bug前段時間已經修復: 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附帶的非常酷的工具)來更新軟件包, 。

0

我以爲其他人可能會覺得這有幫助。即使我安裝了更新的hyperref程序包,爲了從\nameref獲得正確的行爲,我必須在\usepackage{hyperref}之後明確地呼叫\usepackage{nameref}。沒有明確的電話\usepackage{nameref}\nameref工作,但展示了這個線程討論的錯誤。

更新:這個解決方法不需要爲最小的例子(我檢查)。我不知道我的風格文件中是否有更復雜的事情發生,但如果我找到了某些東西,我會更新它。這仍然可以幫助有人遇到同樣的問題。

相關問題