我希望更改和字段的顺序,biblatex
使@inproceedings
字段@incollection
位于pages
和字段之前publisher
。address
书籍章节和论文集的这种排序是各种语言学期刊的要求,以下是其应有的样子(取自 Isogloss):
Baker, Mark C. 2008. 微观参数世界中的宏观参数。收录于 T. Biberauer (ed.) 的《句法变异的极限》,第 351-373 页。阿姆斯特丹:John Benjamins。
该booktitle
字段后面跟着一个逗号,然后是“页面”。
这是一个简单的例子:
\documentclass[12pt, twoside]{article}
\usepackage[style=authoryear-comp]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@incollection{baker2008,
AUTHOR = "Mark C. Baker",
BOOKTITLE = "The limits of syntactic variation",
EDITOR = "T. Biberauer",
TITLE = "The macroparameter in a microparametric world",
YEAR = "2008",
LOCATION = "Amsterdam",
PAGES = "351--373",
PUBLISHER = "John Benjamins"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Biblatex 上的 authoryear 样式在末尾生成了“页数”:
我知道此输出还存在其他各种问题,但我已设法在其他地方找到修复方法,将它们全部包含在这里会太麻烦。我只需要更改顺序。我已经看到可以通过 来完成xpatch
,但这些类型的编辑仍然超出了我的能力范围。有人知道怎么做吗?
答案1
一般来说,在输出中移动字段并不容易biblatex
。例如,请参见如何在 biblatex-philosophy 中交换参考书目字段?。当相关字段都在同一个 bibmacro 中调用时,这可能很容易,但如果不是这种情况,一个简单的解决方案通常需要大量的代码行。有时可以通过重新和稍微滥用其他 bibmacro 来解决问题。
我们在这里可以使用的一般思想与更改 biblatex 中的部分样式:editor
s 使用biblatex-ext
'sinnamebeforetitle
选项移动(参见例如Biblatex:incollection 中的格式化编辑器和在 biblatex 中将编辑姓名后跟 (Ed./Eds.) 和标题前的逗号),并且pages
可以通过修改 bibmacro 来移动该字段edition
以便也打印pages
(\clearfield{pages}
然后删除该字段,以便通常打印页面的宏以后不会再次执行此操作)。
\documentclass[12pt, twoside]{article}
\usepackage[
backend=biber,
style=ext-authoryear-comp,
innamebeforetitle=true,
]{biblatex}
\DeclareFieldFormat{biblabeldate}{#1}
\DeclareDelimFormat[bib]{nameyeardelim}{\addperiod\space}
\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldAlias{translatortype}{editortype}
\DeclareDelimAlias{translatortypedelim}{editortypedelim}
\DeclareDelimFormat[bib]{innametitledelim}{\addcomma\space}
\DeclareFieldFormat{pages}{#1}
\renewbibmacro*{edition}{%
\printfield{edition}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\clearfield{pages}%
\setunit{\bibeidpunct}%
\printfield{eid}%
\clearfield{eid}%
}
\begin{filecontents}{\jobname.bib}
@incollection{baker2008,
AUTHOR = {Mark C. Baker},
BOOKTITLE = {The Limits of Syntactic Variation},
EDITOR = {T. Biberauer},
TITLE = {The Macroparameter in a Microparametric World},
YEAR = {2008},
LOCATION = {Amsterdam},
PAGES = {351--373},
PUBLISHER = {John Benjamins},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}