当我们在使用 biblatex 包的 tex 文件中使用 \printbibliography 时,在线条目类型的标题将默认以斜体打印。为了使标题正常(非斜体),我们可以轻松地在序言中添加此行:
\DeclareFieldFormat[online]{title}{#1}
我理解这一行的含义(参考 biblatex 包第 188 页)如下:
- [在线] 是条目(参考)类型。
- {title} 是 [online] 条目类型的字段。
- 代码 #1 是打印字段(本例中为标题)的格式。
我有以下问题:
- 文档在哪里告诉我们代码#1 使在线标题变为正常而不是默认的斜体。
- 是否有任何其他代码(例如#2或#3)导致字段格式不同?
以下是我的 tex 文件:
\documentclass{book}
% to run: step1: pdflatex step 2: biber step3: pdflatex
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@online{myonline,
author = {my author},
date = {2020},
title = {my title},
url = {https://mywebsite.qrst},
}
\end{filecontents}
\DeclareFieldFormat[online]{title}{#1}
\addbibresource{\jobname.bib}
\begin{document}
\textcite{myonline}
\printbibliography
\end{document}
答案1
在
\DeclareFieldFormat[online]{title}{#1}
您必须将其理解#1
为您的条目实际标题的(占位符)变量。
这类似于 LaTeX 中宏定义的工作方式。例如
\newcommand*{\foo}[1]{A#1B}
可以用作
\foo{bar}
是#1
宏参数的占位符(在示例调用的情况下\foo{bar}
#1
将变成bar
;如果你说\foo{boo}
,#1
就会变成boo
)。
像这样
\DeclareFieldFormat[online]{title}{#1}
表示biblatex
不对标题进行任何处理。不执行任何操作意味着不应用任何特殊格式。
另一方面,
\DeclareFieldFormat[online]{title}{\mkbibemph{#1}}
会将宏应用于\mkbibemph
标题,使其以 的形式显示\emph
,通常会显示斜体。同样
\DeclareFieldFormat[online]{title}{\mkbibquote{#1}}
将标题括在引号中。
这在文档中有解释\DeclareFieldFormat
(§4.4.2格式化指令,第 199 页,v3.15 版文档biblatex
)
[
\DeclareFieldFormat[<entrytype, …>]{<format>}{<code>}
] 定义字段格式<format>
。此格式指令可由 任意<code>
执行\printfield
。字段的值将<code>
作为其第一个且唯一的参数传递给 。
本质上,这意味着只要使用该字段<code>
,您提供的\DeclareFieldFormat
内容就会被执行,并且在这种情况下,代码将被字段的实际内容替换。<format>
#1
特别是你上面第三点的解释
代码 #1 是打印字段(本例中为标题)的格式。
是正确的,但是这个例子\DeclareFieldFormat[online]{title}{#1}
可能无法帮助我们完全理解发生了什么。
所以也许我们应该看看
\DeclareFieldFormat[online]{title}{\mkbibemph{#1}}
并说
- 代码
\mkbibemph{#1}
控制字段(本例中为标题)的格式。这#1
是实际字段值的占位符,我们可以使用任意 LaTeX 代码来格式化它。
\DeclareFieldFormat
仅在#1
有效(作为实际字段值的占位符),#2
并且#3
会抛出错误(! Illegal parameter number in definition of \blx@defformat@d.
)。