2010-07-14 22 views
0

我想修改glossaryentryfield,以便根據用戶1(包提供的密鑰是否已定義/設置或不是)來創建輸出。試過如下:如何根據是否定義用戶密鑰來生成輸出

\renewcommand*{\glossaryentryfield}[5]{\bfseries{\glstarget{##1}{##2}} & ##3 \\ 
\ifempty{\glsentryuseri{##1}} 
    it & is very empty \\ 
\else 
    & \glsentryuseri{##1} \\% 
\fi} 

然而這導致一些errormessages這樣的:!

未定義的控制序列 \ ifempty L.49 \ setentrycounter {PAGE} \ {glsnumberformat一}}} %Th e控制序列末尾的 錯誤消息的第一行是 從未\ def'ed。如果您有拼寫錯誤 它(例如,\hobx'), type我和 正確的拼寫(例如,'I \橫向盒「)。 否則只是繼續,我會 忘了什麼是不確定的。

(一個似乎每個詞彙的條目)顯然跟一個無與倫比的\ else和無與倫比\網絡

據我所看到的,我必須做的展開階的東西,但是我是一個完整的新手到乳膠。 我不能簡單地設置所有的user1鍵,因爲我想只顯示額外的行,如果user1被定義,另一行僅用於調試目的。

我也試圖\ expandafter直接\前添加,如果(\ expandafter \ ifempty {\ glsentryuseri {## 1}})(導致下面的輸出:)

user1value它&是非常空\\ & user1value

,因爲沒有人能awnser這個我crossposted它在the latex community並增加了一個小例子那裏。一旦它得到一個站點awnsered我會crosspost解決

回答

0

尼古拉·塔爾博特awnsered上latex community我的問題,她這樣寫道:

\ ifempty不標準 乳膠,這是何等的定義導致 錯誤消息。您可以使用ifmtarg 程序包,該程序包提供了內部的 命令\ @ifmtarg。例如:

\documentclass{article} 

\usepackage{ifmtarg} 
\usepackage[style=long]{glossaries} 

\makeglossaries 

\makeatletter 
\newcommand*{\ifuseriempty}[3]{% 
    \[email protected]\tmp{\glsentryuseri{#1}}% 
    \expandafter\@ifmtarg\expandafter{\tmp}{#2}{#3}% 
} 
\makeatother 

\renewcommand*{\glossaryentryfield}[5]{\bfseries{\glstarget{#1}{#2}} 
& #3 \\ 
\ifuseriempty{#1}% 
    {it &is very empty}% 
    { &\glsentryuseri{#1}}% 
\\% 
} 

\newglossaryentry{sample}{name=sample,% 
    description={sample without user 1 key}} 

\newglossaryentry{sample2}{name=sample2,% 
    description={sample with user 1 key}, 
    user1={User1 Value}} 

\begin{document} 
\gls{sample}, \gls{sample2}. 

\printglossaries 
\end{document} 

問候尼古拉·塔爾博特

對於我而言的glossaryentryfield有看起來像這樣:

\ renewcommand * {\ glossaryentryfield} [5] {\ bfseries {\ glstarget {#1} {#2}} &#3 \ \ ifuseriempty {#1}% {}% {& \ glsentryuseri {#1} \}% }

如果您想在\ newglossarystyle環境中使用此參數,請記住使用##代替參數編號#前面