![name:delim 和 name:hook 在 biblatex 做什麼?](https://rvso.com/image/476235/name%3Adelim%20%E5%92%8C%20name%3Ahook%20%E5%9C%A8%20biblatex%20%E5%81%9A%E4%BB%80%E9%BA%BC%EF%BC%9F.png)
are宏看起來是低階的,每個巨集只接受一個參數,該參數通常是 s 的name:delim
組合。然而 Moewe 小心翼翼地以不同的方式將它們結合起來。name:hook
namepart
這是一個標準的名稱顯示方案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
(“和”)可能會根據後面的單字/名稱改變其形式(在西班牙語中,您必須在“y”和“e”之間切換)。這就是為什麼name:delim
要輸入一些有關名稱的信息,以便它可以決定“和”的形式。一般來說,參數中的參數順序name:delim
應遵循相關 bibmacro 列印的名稱部分的順序。 (埃塞俄比亞的情況是這樣,但中日韓宏則不然。我在連結的帖子中更改了這一點。)
name:hook
具有類似的作用。但它僅適用於名字。它與諸如此類的事情有關編輯者在法語中,其中經過將會德或者d'取決於名稱。
除非您使用的語言需要根據後面的內容修改單字(並且該修改是由 實現的biblatex
),否則當您不按「正確的順序」提供參數時,您不會注意到名稱格式的差異。
一般經驗法則是,name:delim
和name:hook
應該按照巨集列印的順序提供名稱部分參數。