Что делают name:delim и name:hook в biblatex?

Что делают name:delim и name:hook в biblatex?

Макросы name:delimare name:hookкажутся низкоуровневыми и каждый принимает только один аргумент, который обычно является комбинацией nameparts. И все же 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}}

иИмена CJK

\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), например, иногда это «и». В некоторых языках finalnamedelim(«и») может менять свою форму в зависимости от следующего слова/имени (в испанском языке вам нужно переключаться между «y» и «e»). Вот почему name:delimgets получает некоторую информацию об имени, чтобы он мог определить форму «и». В общем, порядок аргументов в аргументе name:delimдолжен соответствовать порядку частей имени, напечатанных соответствующим bibmacro. (Это было верно для случая эфиопского языка, но не для макроса CJK. Я изменил это в связанном посте.)

name:hookимеет похожую роль. Но это относится только к имени. Это относится к таким вещам, какОтредактированона французском языке, гдекбыло быдеилид'в зависимости от имени.


Если вы не используете язык, в котором необходимо изменять слова в зависимости от того, что следует далее (и эта модификация реализована с помощью biblatex), вы не заметите разницы в форматах имен, если не подадите аргументы в «правильном порядке».

Общее правило заключается в том, что аргументы части имени name:delimследует name:hookпередавать в том же порядке, в котором они выводятся макросом.

Связанный контент