如何让一个参数为空而不破坏 if ?

如何让一个参数为空而不破坏 if ?

我正在重构 biblatex 样式以适应最近引入 biber 的更改。所以我有以下代码:

\DeclareNameFormat{labelname}{%
  \nameparts{#1}%
  \ifcase\value{uniquename}%
    {\usebibmacro{name:first-last}{\namepartfamily}{\namepartprefixi}{}{\namepartsuffix}}%
  \or
    \ifuseprefix
      {\usebibmacro{name:first-last}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffixi}}
      {\usebibmacro{name:first-last-init}{\namepartfamily}{\namepartgiveni}{\namepartprefixi}{\namepartsuffixi}}%
  \or
    \usebibmacro{name:first-last-init}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
  \fi%
  \usebibmacro{name:andothers}%
}%

但是这段代码总是给我错误“extra \or”(对于 \or s)和“extra \fi”。调试时,我发现,在{}第一个分支中填写任何内容都可以使代码正常工作。但我需要在那里有一个空参数。为什么对于 if 结构来说,参数是否为空会有区别?而且,更重要的是:我如何在其中提交一个空参数?

答案1

您没有提供足够的上下文来运行代码,但是您已经

\ifcase\value{uniquename}%

这里\ifcase需要一个<number>,并且假设的标准 latex 定义\value\value{uniquename}是一个数字,如果uniquename是一个 latex 计数器,也就是说,如果\c@uniquename被定义为计数寄存器。

如果\c@uniqename未定义,\value则将其定义\let\relax。您没有说明想要什么非错误行为,但例如您可以使其充当 -1,在这种情况下\ifcase不会执行任何分支。

\ifcase\expandafter\ifx\csname c@uniquename\endcsname\relax-1 \else\value{uniquename}\fi

相关内容