如何使用 \renewbibmacro 与不同的条目类型?

如何使用 \renewbibmacro 与不同的条目类型?

问题,我希望 ja 的出现方式如下:

Biernacki, P. and Waldorf, D. (1981). “Snowball sampling: Problems and techniques
of chain referral sampling”, Sociological methods & research
10.2, pp. 141–163.

moewe 的神奇解决方案可以做到这一点(摆脱“In:”):

\renewbibmacro*{in:}{%
  \setunit{\addcomma\space}%
  \ifentrytype{article}
    {}
    {\printtext{%
       \bibstring{in}\intitlepunct}}}

但同时我希望 incollections 显示为:

Froestad, J., Shearing, C., and Van der Merwe, M. (2015) ‘Criminology: Re-
Imagining Security and Risk.’, in Bourbeau, P. (ed) Security: Dialogue across
Disciplines. Cambridge: Cambridge University Press., pp. 177–195.

但 ', in' 显示为 ' In:'。所以我想在前面添加一个逗号,将 I 小写并删除冒号。我尝试重复与 moewe 的答案类似的代码,但我无法让它工作:只有最后一个 renewbibmacro 起作用。TIA!!

答案1

\renewbibmacro*{in:}{%
  \setunit{\addcomma\space}%
  \ifentrytype{article}
    {}
    {\printtext{%
       \bibstring{in}\intitlepunct}}}

\renewcommand*{\intitlepunct}{\addspace}

是您想要的正确解决方案。

但是,当我们使用代码和你问题中的最小示例时,就会发现其中存在一个小问题为什么我的 MWE 看不到参考文献?

如果你有此外修改了字段的字段格式title(我在这里推测,因为您没有共享 MWE,但发生这样的事情并不完全奇怪,因为您必须大量修改样式才能获得您显示的输出)您放在字段末尾的句点froestad2015Criminology可能会混淆biblatex的标点符号跟踪器。

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{friedman2001greedy,
  title     = {Greedy function approximation: a gradient boosting machine},
  author    = {Friedman, Jerome H.},
  journal   = {Annals of Statistics},
  pages     = {1189--1232},
  year      = {2001},
  publisher = {JSTOR},
}
@incollection {froestad2015Criminology,
  author    = {Froestad, J. and Shearing, C. and {Van der Merwe}, M.},
  title     = {Criminology:  Re-Imagining  Security  and  Risk.},
  booktitle = {Security: Dialogue across Disciplines.},
  publisher = {Cambridge: Cambridge University Press.},
  year      = {2015},
  pages     = {177--195},
  editor    = {Bourbeau, P.},
}
\end{filecontents}


\documentclass{article}

\usepackage[%
  backend=biber,
  style=authortitle,
  sorting=nyt,
]{biblatex}
\addbibresource{\jobname.bib}

\DeclareFieldFormat[incollection]{title}{\enquote{#1}}

\renewbibmacro*{in:}{%
  \setunit{\addcomma\space}%
  \ifentrytype{article}
    {}
    {\printtext{%
       \bibstring{in}\intitlepunct}}}

\renewcommand*{\intitlepunct}{\addspace}

\begin{document}
  \textcite{friedman2001greedy,froestad2015Criminology}

  \printbibliography
\end{document}

给出

在此处输入图片描述

biblatex试图抑制双标点符号,因此

“犯罪学:重新想象安全和风险。”

抑制逗号通常会跟在它后面,因为句号后面不能跟逗号。

效果并不明显(如果你仔细观察的话)

安全:跨学科对话。

因为无论如何它后面都会跟着一个句号(但如果您.在字段中使用booktitle,则句号以斜体显示,而如果biblatex自行添加,则句号为直立)。

逗号不被隐藏

剑桥大学出版社,2015

因为biblatex(在此字段中错误地)假设字段.中的apublisher总是表示缩写,其后使用逗号即可。

解决方法是从文件中删除多余的句号.bib

@incollection {froestad2015Criminology,
  author    = {Froestad, J. and Shearing, C. and {Van der Merwe}, M.},
  title     = {Criminology:  Re-Imagining  Security  and  Risk},
  booktitle = {Security: Dialogue across Disciplines},
  publisher = {Cambridge University Press},
  location  = {Cambridge},
  year      = {2015},
  pages     = {177--195},
  editor    = {Bourbeau, P.},
}

运行良好,并给出了预期的结果

在此处输入图片描述

相关内容