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

我想修改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'和   正确的拼写(例如,'I hbox')。   否则就继续,我会   忘记任何未定义的东西。 (似乎每个词汇表条目一个)显然后跟一个无法匹配的 else和不匹配的 fi 据我所知,我必须对扩展订单做一些事情,但我是乳胶的完全新手。 我不能简单地设置所有user1-keys,因为我只想在定义user1时显示额外的行,另一行仅用于调试目的。 我还尝试在 if( expandafter ifempty { glsentryuseri {## 1}})之前直接添加 expandafter(导致以下输出:)   user1value it&是非常空的\& user1value 因为没有人可以发现这个我在乳胶社区交叉了它并在那里添加了一个最小的例子。一旦它在一个站点上被激活,我将交叉解决方案     
已邀请:
尼古拉·塔尔博特(Nicola Talbot)提出了关于乳胶社区的问题,她写道:    ifempty未在标准中定义   LaTeX,这是造成这种情况的原因   错误信息。你可以使用ifmtarg   包,提供内部   命令 @ifmtarg。例如:
documentclass{article}

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

makeglossaries

makeatletter
newcommand*{ifuseriempty}[3]{%
  protected@edeftmp{glsentryuseri{#1}}%
  expandafter@ifmtargexpandafter{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 为了我的目的,glossaryentryfield必须如下所示: renewcommand * { glossaryentryfield} [5] { bfseries { glstarget {#1} {#2}}    &安培; #3     ifuseriempty {#1}%       {}%       {& glsentryuseri {#1} }%     } 如果要在 newglossarystyle环境中使用它,请记住使用##而不是#infront参数号     

要回复问题请先登录注册