根据 Biblatex 的手册,标准样式将@review
其视为@article
:
对其他一些作品的评论。这是该
@article
类型的更具体变体。标准样式会将此条目类型视为 的别名@article
。
这让我以为这两种输入方式应该采用相同的格式。然而,事实似乎并非如此:
\begin{filecontents}{\jobname.bib}
@article{article,
author = {Mouse, A.},
title = {A Tall Tail},
journal = {Tales to Nibble By},
pages = {1--9},
volume = 31,
number = 4,
year = 1989,
}
@review{review,
author = {Vole, Adrian},
title = {Review of \emph{Great Grasses}, by A. N. Other-Mouse},
journal = {Tales to Nibble By},
pages = {23--4},
volume = 32,
number = 2,
year = 1990
}
\end{filecontents}
\documentclass{article}
\usepackage{biblatex}
\bibliography{\jobname}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
请注意两个区别:
标题
@review
用斜体表示;@article
标题是引用的。vol.
包含在@review
案件中但不是@article
案件。
.bbx
然而,包含该字符串的唯一标准文件review
是standard.bbx
包含以下行的文件:
\DeclareBibliographyAlias{review}{article}
此外,在我看来,.sty
或.def
文件等中没有明显的东西可以解释这些差异。这里有一些提及review
,但大多是以字符串形式出现的,例如reviewof
等,我认为它们不负责格式化条目类型为@review
。
Biblatex 中条目类型的关系到底是什么alias
?别名条目类型的格式应该如何配置?
答案1
根据biblatex
文档,第 126 页,\DeclareBibliographyAlias{alias}{type}
内容如下:
如果书目驱动程序涵盖多种条目类型,则可以使用此命令定义别名,其中
entrytype
是已定义驱动程序的名称。
当您使用\DeclareBibliographyAlias{alias}{type}
内部发生的情况(参见biblatex2.sty
)是
\newrobustcmd*{\DeclareBibliographyAlias}[2]{%
\csedef{blx@bbx@#1}{%
\expandafter\noexpand\csname blx@bbx@#2\endcsname}}
因此\blx@bbx@alias
只需扩展为\blx@bbx@type
。该命令\blx@bbx@<type>
用于打印参考书目列表(及相关内容)并“调用”通过 声明的驱动程序\DeclareBibliographyDriver{type}
。
对于所有其他目的,biblatex
仍然知道实际的入口类型。只是驾驶员被重新安排了路线。
您注意到的差异是由于不同的\DeclareFieldFormat
指令造成的。@article
得到特殊处理,即
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,thesis,unpublished]
{title}{\mkbibquote{#1\isdot}}
\DeclareFieldFormat[article,periodical]{volume}{#1}% volume of a journal
而@review
没有,并默认为标准
\DeclareFieldFormat{title}{\mkbibemph{#1}}
\DeclareFieldFormat{volume}{\bibstring{volume}~#1}% volume of a book
格式化代码遍布整个biblatex2.sty
。它主要包含对 的调用\blx@getformat
,分解为对表单定义主机的切换abx@#2@\blx@imc@thefield{entrytype}@#4
(此处#2
是字段“id”和#4
字段名称)。在这里我们可以看到实际的条目类型用于格式化。
总而言之,\DeclareBibliographyAlias
它实际上只是一个用于参考书目目的别名,实际上用途更少:仅用于驱动程序,格式化仍然使用通常的(非别名)类型完成。
对于完整别名,Biber 源映射(如中定义的源映射)biblatex.def
可能更合适(摘自 的代码biblatex.def
)
\DeclareDriverSourcemap[datatype=bibtex]{
\map{
\step[typesource=conference, typetarget=inproceedings]
\step[typesource=electronic, typetarget=online]
\step[typesource=www, typetarget=online]
}
}
答案2
moewe 给出了很好的答案我将其作为一个简单的脚注附加到其中,但我认为添加有关我现在针对该类型进行具体配置的方式的详细信息可能会很有用@review
。
在我的 中,我添加了以下几行来配置和字段biblatex.cfg
的格式。遵循的格式;遵循的格式:volume
title
volume
@article
title
@suppperiodical
\DeclareFieldFormat[review]{volume}{#1}
\DeclareFieldFormat[review]{title}{#1}
因为我也有in:
宏的自定义配置@article
(来自这里),我还调整了这段代码:
% https://tex.stackexchange.com/a/10686/
\renewbibmacro{in:}{%
\ifentrytype{article}{}{%
\ifentrytype{review}{}{% apply to @review entries, too
\printtext{\bibstring{in}\intitlepunct}%
}%
}%
}
对于有问题的 MWE(缺少修改in:
),这将产生:
\begin{filecontents}{\jobname.bib}
@article{article,
author = {Mouse, A.},
title = {A Tall Tail},
journal = {Tales to Nibble By},
pages = {1--9},
volume = 31,
number = 4,
year = 1989,
}
@review{review,
author = {Vole, Adrian},
title = {Review of \emph{Great Grasses}, by A. N. Other-Mouse},
journal = {Tales to Nibble By},
pages = {23--4},
volume = 32,
number = 2,
year = 1990
}
\end{filecontents}
\documentclass{article}
\usepackage{biblatex}
\DeclareFieldFormat[review]{volume}{#1}
\DeclareFieldFormat[review]{title}{#1}
\bibliography{\jobname}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
我不确定这是否是格式化评论标题的最佳方式。(我知道这取决于风格。)但书籍类型格式和文章类型格式似乎都不太合适。