问题

问题

所以我使用的french语言风格源自authortitle-terse。我曾尝试询问雄心勃勃(太雄心勃勃?)的问题这里,我试图将这个问题分解成几个小部分。

现在,我想根据条目类型自定义作者姓氏的样式。根据我以前的经验和这里的问题,我找不到如何做到这一点。

在中french.lbx,我读到的\mkbibnamefamily定义是:

  \protected\def\mkbibnamefamily#1{%
    \textsc{\textnohyphenation{#1}}}%

据我所知,根据我在这里的第一次尝试,我不能做这样的事情:

\DeclareFieldFormat[article,book]{\mkbibnamefamily}{#1}

甚至:

\UndefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}
\renewcommand*{\mkbibnamefamily}{\textsc}
\renewcommand[article, book]{\mkbibnamefamily}{\textsc}

因为文章/书的最后一行破坏了代码。

问题

  1. 如何根据条目类型更改姓氏的格式?
  2. \DeclareFieldFormat名称的格式与标题有何不同?
  3. 格式化编辑器姓氏的命令是什么?

MWE 代码

main.tex

\documentclass{article}

% Needed by Biblatex
\usepackage{polyglossia}
\setmainlanguage{french}    
\usepackage{csquotes}
\usepackage[style=authortitle-terse, language=french, bibencoding=UTF8, backend=biber]{biblatex}

\addbibresource{main.bib}    
    \DeclareFieldFormat{author}{#1}% no postnote prefix in "multicite" commands
\UndefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}
\renewcommand*{\mkbibnamefamily}{\textsc}
% \renewcommand[article, book]{\mkbibnamefamily}{\textsc}    

\begin{document}
\section{Test de la bibliographie}
\printbibliography
\section{Tests de citation}
book : \cite{book} \\
thesis : \cite{thesis} \\
Article : \cite{article} \\
\end{document}

main.bib

@book{book,
    author      = {Other, Nicolas},
    title       = {A title for a thesis},
    date        = {2017},
    location    = {Berne and Bâle and Lugano},
    origlocation = {Lausanne}
}

@thesis{thesis,
  author      = {Gut, Nicolas},
  title       = {Die unbezifferte Forderungsklage nach der Schweizerischen Zivilprozessordnung},
  location    = {Bâle},
  date        = {2014},
}

@article{article,
  author      = {Affolter, Markus},
  title       = {Die Durchsetzunh von Informationspflichten im Zivilprozess},
  origLocation    = {St. Gall},
  date        = {1994},
  location    = {Berne and Stuttgart and Vienne},
}

答案1

  1. 对于特定类型的格式,\mkbibnamefamily您可以使用\ifentrytype

    \renewcommand*{\mkbibnamefamily}[1]{%
      \ifentrytype{article}
        {\mkbibemph{#1}}
        {\textsc{#1}}}
    

    由于您的文档加载了法语本地化,因此这个问题变得复杂。french.lbx重新定义\mkbibnamefamily为始终提供小写字母。您可以告诉french.lbx停止\mkbibnamefamily使用

    \DefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}
    
  2. biblatex大致知道三种数据类型:(1)字段,(2)列表和(3)名称列表。字段是最简单的,可以使用 完全自定义\DeclareFieldFormat。列表有点棘手,因为列表可能包含任意数量的项目,并且您可能希望将整个列表格式化为一个块或分别格式化各个项目。此外,biblatex需要一些工作来在列表的项目之间放置分隔符。列表的自定义命令是\DeclareListFormat。名称更加棘手,它们不仅是列表,而且列表的项目由名称部分组成,需要特殊处理。名称列表的命令是\DeclareNameFormat,但有许多辅助宏可以\mkbibnamefamily帮助您自定义名称格式而无需实际使用\DeclareNameFormat。所有\Declare...Format命令都可以通过可选的第一个参数变为类型特定。名称的辅助命令通常不是类型特定的,但可以解决这个问题(如上所示)。

  3. 这取决于具体上下文。您可以\ifcurrentname{editor}{<true>}{<false>}\ifentrytype{article}{<true>}{<false>}第 1 项中那样使用。您也可以定义一个全新的名称格式。要了解其工作原理,让我们来看看biblatex.def的定义(请注意,如果您使用- 或-like 样式,则author的标准定义会略有修改,它们会改为设置,但原理是相同的,并且使用标准 的代码更短)。biblatex.defauthoryearauthortitle\DeclareNameAlias{author}{sortname}\DeclareNameAlias{author}{default}

    的名称格式author定义为

    \DeclareNameAlias{author}{default}
    

    我们后来发现

    \DeclareNameAlias{default}{given-family}
    

    进而

    \DeclareNameFormat{given-family}{%
      \ifgiveninits
        {\usebibmacro{name:given-family}
          {\namepartfamily}
          {\namepartgiveni}
          {\namepartprefix}
          {\namepartsuffix}}
        {\usebibmacro{name:given-family}
          {\namepartfamily}
          {\namepartgiven}
          {\namepartprefix}
          {\namepartsuffix}}%
      \usebibmacro{name:andothers}}
    

    这意味着名称格式涉及调用辅助宏。这里最重要的宏是name:given-family

    \newbibmacro*{name:given-family}[4]{%
      \usebibmacro{name:delim}{#2#3#1}%
      \usebibmacro{name:hook}{#2#3#1}%
      \ifdefvoid{#2}{}{\mkbibnamegiven{#2}\isdot\bibnamedelimd}%
      \ifdefvoid{#3}{}{%
        \mkbibnameprefix{#3}\isdot
        \ifprefchar
          {}
          {\ifuseprefix{\bibnamedelimc}{\bibnamedelimd}}}%
      \mkbibnamefamily{#1}\isdot
      \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}}
    

    其他名称格式使用类似的宏name:family和。此处使用类似的命令,因此这是最终应用更改的级别。由于和与它们都类似,因此请使用。name:family-given\mkbibnamefamilyname:familyname:family-givenname:given-family\mkbibnamefamily

    你可以定义

    \DeclareNameFormat{given-family:bold}{%
      \let\mkbibnamefamily\mkbibbold
      \ifgiveninits
        {\usebibmacro{name:given-family}
          {\namepartfamily}
          {\namepartgiveni}
          {\namepartprefix}
          {\namepartsuffix}}
        {\usebibmacro{name:given-family}
          {\namepartfamily}
          {\namepartgiven}
          {\namepartprefix}
          {\namepartsuffix}}%
      \usebibmacro{name:andothers}}
    

    进而

    \DeclareNameAlias[article]{author}{given-family:bold}
    

    仅影响@articles 的作者。

相关内容