【问题标题】:How to generate output depending on whether or not a userkey has been defined如何根据是否定义了用户密钥来生成输出
【发布时间】:2010-07-14 10:33:47
【问题描述】:

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

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

然而,这会导致类似这样的几个错误消息:

!未定义的控制序列。 \如果为空 l.49 \setentrycounter{page}\glsnumberformat{a}}} % 结束时的控制序列 您的错误消息的第一行是 从来没有\def'ed。如果您拼写错误 它(例如,\hobx'), typeI' 和 正确的拼写(例如,`I\hbox')。 否则就继续,我会 忘记任何未定义的内容。

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

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

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

user1value 它 & 很空 \\ & user1value

因为没有人能看到这个,所以我将它交叉发布在the latex community 并在那里添加了一个最小的例子。一旦它在一个站点上得到 awnsered,我将交叉发布解决方案

【问题讨论】:

    标签: latex glossaries


    【解决方案1】:

    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}
    

    问候尼古拉·塔尔博特

    就我而言,词汇表条目字段必须如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 2018-01-27
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2014-01-27
      • 2019-07-08
      相关资源
      最近更新 更多