Как генерировать вывод в зависимости от того, был ли определен пользовательский ключ - PullRequest
0 голосов
/ 14 июля 2010

Я хотел бы изменить поле 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'). В противном случае просто продолжите, и я забуду обо всем, что былоundefined.

(по-видимому, по одному на каждую запись в Глоссарии), за которым явно следует непревзойденный \ else и непревзойденный \ fi

Насколько я могу судить, мне нужно что-то сделатьпорядок расширения, однако я полный новичок в латексе. Я не могу просто установить все user1-ключи, так как я хочу отображать только эту дополнительную строку, если определен user1, другая строка только для отладки purposes.

Я также пытался добавить \ expandafter непосредственно перед \ if (\ expandafter \ ifempty {\ glsentryuseri {## 1}})) (в результате получился следующий вывод:)

user1value это & ​​очень пусто \\ & user1value

, поскольку никто не мог этого заметить, я поместил его в сообщество латекса и добавил там минимальный пример.Как только он появится на одном сайте, я перейду к решению

1 Ответ

0 голосов
/ 21 июля 2010

Никола Талбот задал мой вопрос о сообществе латекса , она написала:

\ 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

...