Как генерировать вывод в зависимости от того, был ли определен пользовательский ключ
Я хотел бы изменить поле glossaryentry так, чтобы оно создавало выходные данные в зависимости от того, был ли определен / установлен ключ1, предоставленный пакетом, или нет. Я попробовал следующее:
\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-ключи, так как я хочу отображать только эту дополнительную строку, если user1 определен, другая строка только для целей отладки.
Я также пытался добавить \expandafter непосредственно перед \if ( \expandafter\ifempty{\glsentryuseri{##1}}) (в результате получился следующий вывод:)
user1value это & очень пусто \\ & user1value
так как никто не мог этого заметить, я поместил это в латексное сообщество и добавил там минимальный пример. Как только он будет размещен на одном сайте, я перейду к решению
1 ответ
Никола Тэлбот ответила на мой вопрос о латексном сообществе, она написала:
\ 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} \}% }
Не забудьте использовать ## вместо # infront номеров параметров, если вы хотите использовать это в среде \ newglossarystyle