所以我使用的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}
因为文章/书的最后一行破坏了代码。
问题
- 如何根据条目类型更改姓氏的格式?
\DeclareFieldFormat
名称的格式与标题有何不同?- 格式化编辑器姓氏的命令是什么?
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
对于特定类型的格式,
\mkbibnamefamily
您可以使用\ifentrytype
。\renewcommand*{\mkbibnamefamily}[1]{% \ifentrytype{article} {\mkbibemph{#1}} {\textsc{#1}}}
由于您的文档加载了法语本地化,因此这个问题变得复杂。
french.lbx
重新定义\mkbibnamefamily
为始终提供小写字母。您可以告诉french.lbx
停止\mkbibnamefamily
使用\DefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}
biblatex
大致知道三种数据类型:(1)字段,(2)列表和(3)名称列表。字段是最简单的,可以使用 完全自定义\DeclareFieldFormat
。列表有点棘手,因为列表可能包含任意数量的项目,并且您可能希望将整个列表格式化为一个块或分别格式化各个项目。此外,biblatex
需要一些工作来在列表的项目之间放置分隔符。列表的自定义命令是\DeclareListFormat
。名称更加棘手,它们不仅是列表,而且列表的项目由名称部分组成,需要特殊处理。名称列表的命令是\DeclareNameFormat
,但有许多辅助宏可以\mkbibnamefamily
帮助您自定义名称格式而无需实际使用\DeclareNameFormat
。所有\Declare...Format
命令都可以通过可选的第一个参数变为类型特定。名称的辅助命令通常不是类型特定的,但可以解决这个问题(如上所示)。这取决于具体上下文。您可以
\ifcurrentname{editor}{<true>}{<false>}
像\ifentrytype{article}{<true>}{<false>}
第 1 项中那样使用。您也可以定义一个全新的名称格式。要了解其工作原理,让我们来看看biblatex.def
的定义(请注意,如果您使用- 或-like 样式,则author
的标准定义会略有修改,它们会改为设置,但原理是相同的,并且使用标准 的代码更短)。biblatex.def
authoryear
authortitle
\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
\mkbibnamefamily
name:family
name:family-given
name: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}
仅影响
@article
s 的作者。