我在David Hanak的回答後編輯了這個問題(謝謝btw!)。他在語法方面提供了幫助,但似乎我並沒有使用正確的功能開始。有沒有辦法檢查標籤是否已經在LaTeX中定義?
基本上我想讓編譯器忽略某個標籤的多個定義,只使用第一個。爲了做到這一點,我想我只是做這樣的事情:
\makeatletter \newcommand{\mylabel}[1]{ \@ifundefined{#1}{\label{#1}}{X} } \makeatother
這不工作,雖然,因爲第一種選擇總是選擇(如果標籤被定義或沒有也沒關係)。我認爲\ @ifundefined(和建議的\ ifundefined)僅適用於命令,不適用於標籤,但我對LaTeX並不十分了解。任何幫助,這將是偉大的!謝謝!
稍後更新: 我將David Hanak的回答標記爲我的問題的正確答案,但它不是一個完整的解決方案,但它確實幫助了我。 問題是,我認爲但我不是專家,即使David的代碼檢查是否定義了標籤,它也只適用於在之前的運行中定義了標籤(即在.aux文件中)的情況。如果在同一運行中定義了兩個具有相同名稱的\ mylabel,則第二個將仍然被定義。此外,即使您設法解決此問題,它也會使LaTeX使用您按時間順序定義的第一個標籤,而不一定是文本中的第一個標籤。 無論如何,下面是我的快速和骯髒的解決方案。它使用計數器似乎立即被定義的事實。
\newcommand{\mylabel}[1]{% \@ifundefined{[email protected]#1}{% \newcounter{#1}% \setcounter{#1}{0}% }{}% \ifthenelse{\value{#1} > 0}{}{% \label{#1}% \addtocounter{#1}{1}% }% }
我不知道是否需要到櫃檯初始化爲0,因爲它似乎是一個可能的默認設置,但我找不到,如果是這樣的話,所以我只是暫時安全。 此外,這使用'ifthen'包,我不知道是必要的。
\ ifundefined未在LaTeX中定義,恐怕。 – 2009-01-31 01:26:47