0

我想修改词汇表条目,以便它根据 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'), typeI' 和正确的拼写(例如,'I\hbox')。否则继续,我会忘记任何未定义的。

(似乎每个词汇表条目都有一个)显然后面是不匹配的 \else 和不匹配的 \fi

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

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

user1value 它 & 很空 \\ & user1value

因为没有人能看到这个,所以我在乳胶社区交叉发布了它,并在那里添加了一个最小的例子。一旦它在一个站点上被覆盖,我将交叉发布解决方案

4

1 回答 1

0

Nicola Talbot 回答了我关于乳胶社区的问题,她写道:

\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}

问候尼古拉·塔尔博特

出于我的目的,词汇表条目字段必须如下所示:

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

如果要在 \newglossarystyle 环境中使用,请记住在参数编号前使用 ## 而不是 #

于 2010-07-21T06:59:26.510 回答