Biblatex:\DeclareFieldFormat[online]{title}{#1} 中代码 #1 的含义和文档

Biblatex:\DeclareFieldFormat[online]{title}{#1} 中代码 #1 的含义和文档

当我们在使用 biblatex 包的 tex 文件中使用 \printbibliography 时,在线条目类型的标题将默认以斜体打印。为了使标题正常(非斜体),我们可以轻松地在序言中添加此行:

\DeclareFieldFormat[online]{title}{#1}

我理解这一行的含义(参考 biblatex 包第 188 页)如下:

  1. [在线] 是条目(参考)类型。
  2. {title} 是 [online] 条目类型的字段。
  3. 代码 #1 是打印字段(本例中为标题)的格式。

我有以下问题:

  1. 文档在哪里告诉我们代码#1 使在线标题变为正常而不是默认的斜体。
  2. 是否有任何其他代码(例如#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}}

并说

  1. 代码\mkbibemph{#1}控制字段(本例中为标题)的格式。这#1是实际字段值的占位符,我们可以使用任意 LaTeX 代码来格式化它。

\DeclareFieldFormat仅在#1有效(作为实际字段值的占位符),#2并且#3会抛出错误(! Illegal parameter number in definition of \blx@defformat@d.)。

相关内容