name:delim 和 name:hook 在 biblatex 做什麼?

name:delim 和 name:hook 在 biblatex 做什麼?

are宏看起來是低階的,每個巨集只接受一個參數,該參數通常是 s 的name:delim組合。然而 Moewe 小心翼翼地以不同的方式將它們結合起來。name:hooknamepart

這是一個標準的名稱顯示方案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}}}

顯然有一個模式,但我沒有看到它們影響可見輸出。所以我想知道當我嘗試拼湊出自己的自訂名稱顯示時,我應該對此給予多少關注。

biblatex.def:

\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:delimname:hook應該按照巨集列印的順序提供名稱部分參數。

相關內容