![Что делают name:delim и name:hook в biblatex?](https://rvso.com/image/476235/%D0%A7%D1%82%D0%BE%20%D0%B4%D0%B5%D0%BB%D0%B0%D1%8E%D1%82%20name%3Adelim%20%D0%B8%20name%3Ahook%20%D0%B2%20biblatex%3F.png)
Макросы name:delim
are 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}}}
Очевидно, что есть закономерность, но я не вижу, чтобы она влияла на видимый вывод. Поэтому я хочу знать, сколько внимания я должен уделять этому, когда пытаюсь сколотить собственное пользовательское отображение имени.
От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:delim
gets получает некоторую информацию об имени, чтобы он мог определить форму «и». В общем, порядок аргументов в аргументе name:delim
должен соответствовать порядку частей имени, напечатанных соответствующим bibmacro. (Это было верно для случая эфиопского языка, но не для макроса CJK. Я изменил это в связанном посте.)
name:hook
имеет похожую роль. Но это относится только к имени. Это относится к таким вещам, какОтредактированона французском языке, гдекбыло быдеилид'в зависимости от имени.
Если вы не используете язык, в котором необходимо изменять слова в зависимости от того, что следует далее (и эта модификация реализована с помощью biblatex
), вы не заметите разницы в форматах имен, если не подадите аргументы в «правильном порядке».
Общее правило заключается в том, что аргументы части имени name:delim
следует name:hook
передавать в том же порядке, в котором они выводятся макросом.