如何根据是否已定义用户密钥生成输出

时间:2010-07-14 10:33:48

标签: latex glossaries

我想修改glossaryentryfield,以便根据user1(包提供的密钥是否已定义/设置)创建输出。我尝试了以下内容:

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

导致了几个错误消息:

  

!未定义的控制序列。    \ ifempty                             l.49 \ setentrycounter {page} \ glsnumberformat {a}}}                                                     %控制序列结束时   您的错误消息的第一行是   从不\ def'ed。如果你拼错了   它(例如,\hobx'), type我'和   正确的拼写(例如,'I \ hbox')。   否则就继续,我会   忘记任何未定义的东西。

(似乎每个词汇表条目一个)显然后跟一个无法匹配的\ else和不匹配的\ fi

据我所见,我必须对扩展订单做一些事情,但我是乳胶的完全新手。 我不能简单地设置所有user1-keys,因为我只想在定义user1时显示额外的行,另一行仅用于调试目的。

我还尝试在\ if(\ expandafter \ ifempty {\ glsentryuseri {## 1}})之前直接添加\ expandafter(导致以下输出:)

  

user1value it&是非常空的\\& user1value

因为没有人可以发现这个我在the latex community交叉了它并在那里添加了一个最小的例子。一旦它在一个站点上被忽略,我将立即交叉解决方案

1 个答案:

答案 0 :(得分:0)

Nicola Talbot在latex community上提出了我的问题,她写道:

  

\ ifempty未在标准中定义   LaTeX,这是造成这种情况的原因   错误信息。你可以使用ifmtarg   包,提供内部   命令\ @ifmtarg。例如:

\documentclass{article}

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

\makeglossaries

\makeatletter
\newcommand*{\ifuseriempty}[3]{%
  \protected@edef\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}
     

关心Nicola Talbot

就我的目的而言,词汇表区域必须如下所示:

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

如果要在\ newglossarystyle enviornment

中使用##,请记住使用##而不是参数号的#infront