这些宏看起来name:delim
都是name:hook
低级的,每个宏只接受一个参数,通常是namepart
s 的组合。然而 Moewe 却小心地以不同的方式组合它们。
以下是标准的名称显示方案biblatex.def
\newbibmacro*{name:family}[4]{%
\ifuseprefix
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\mkbibcompletenamefamily{%
\ifdefvoid{#3}
{}
{\ifcapital
{\mkbibnameprefix{\MakeCapital{#3}}\isdot}
{\mkbibnameprefix{#3}\isdot}%
\ifprefchar{}{\bibnamedelimc}}%
\mkbibnamefamily{#1}\isdot}}
{\usebibmacro{name:delim}{#1}%
\usebibmacro{name:hook}{#1}%
\mkbibcompletenamefamily{%
\mkbibnamefamily{#1}\isdot}}}%
以下是他为展示而定制的解决方案埃塞俄比亚人的名字
\newbibmacro*{name:ethiopian}[3]{%
\usebibmacro{name:delim}{#1#2#3}%
\usebibmacro{name:hook}{#1#2#3}%
\mkbibethgiven{#1}%
\ifdefvoid{#2}{}{\bibnamedelimd\mkbibethpat{#2}\isdot}%
\ifdefvoid{#3}{}{\bibnamedelimd\mkbibethpap{#3}\isdot}}
\newbibmacro*{name:cjk}[3]{%
\usebibmacro{name:delim}{#2#3#1}%
\usebibmacro{name:hook}{#2#3#1}%
\mkbibnamefamily{#1}%
\ifdefvoid{#2}{}{\bibnamedelimd\mkbibnamegiven{#2}}%
\ifdefvoid{#3}{}{\bibnamedelimd\mkbibnamecjk{#3}}}
显然存在某种模式,但我看不出它们会影响可见的输出。所以我想知道在尝试拼凑自己的自定义名称显示时我应该对此给予多少关注。
\newbibmacro*{name:hook}[1]{%
\ifnumequal{\value{listcount}}{1}
{\lbx@initnamehook{#1}}
{}}
\newbibmacro*{name:delim}[1]{%
\ifnumgreater{\value{listcount}}{\value{liststart}}
{\ifboolexpr{
test {\ifnumless{\value{listcount}}{\value{liststop}}}
or
test \ifmorenames
}
{\printdelim{multinamedelim}}
{\lbx@finalnamedelim{#1}}}
{}}
答案1
name:delim
排版不同名称之间的分隔符。通常(multinamedelim
)是逗号或类似的无聊标点符号,但最后一个分隔符可以是特殊的(finalnamedelim
),例如有时是“and”。在某些语言中,finalnamedelim
“and”可能会根据后面的单词/名称改变其形式(在西班牙语中,您必须在“y”和“e”之间切换)。这就是为什么name:delim
需要输入一些有关名称的信息,以便它可以决定“and”的形式。一般来说,的参数中的参数顺序name:delim
应遵循相关 bibmacro 打印的名称部分的顺序。(对于埃塞俄比亚的情况是这样,但对于 CJK 宏则不然。我在链接的帖子中更改了它。)
name:hook
具有类似的作用。但它仅适用于名字。它与以下内容相关編輯在法语中,经过将会德或者d'取决于名字。
除非您使用一种需要根据后面的内容来修改单词的语言(并且该修改由实现biblatex
),否则当您没有以“正确的顺序”提供参数时,您不会注意到名称格式的差异。
一般的经验规则是,name:delim
应该name:hook
按照宏打印的相同顺序输入名称部分参数。