从 biblatex 中的字段中删除内容

从 biblatex 中的字段中删除内容

我的文件@thesis中的条目包含有关部门和学校的字段信息。我正在为期刊创建样式表,其中只需要学校名称(即大学、学院、模拟)。.bibinstitution

因此,我正在寻找一些代码来扫描条目institution中的字段@thesis并从头开始删除文本直到(包括)最后一个.(句点+空格)实例。

如果未发现此类情况(如下所示miller1923),则不应执行任何操作。如果发现多种情况(如下所示anderson2008),则应将其全部删除。最后,只应保留大学名称。

\documentclass{article}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@thesis{miller1923,
    AUTHOR = "Oscar Miller",
    INSTITUTION = "Harvard University",
    TITLE = "War -- what is it good for?",
    TYPE = "Ph.D. dissertation",
    YEAR = "1923"}
@thesis{smith2003,
    AUTHOR = "Peter Smith",
    INSTITUTION = "Department of Chemistry. Stanford University",
    TITLE = "Oxygen and stuff",
    TYPE = "Ph.D. dissertation",
    YEAR = "2003"}
@thesis{anderson2008,
    AUTHOR = "John Anderson",
    INSTITUTION = "Department of Lang. \& Litt. Swarthmore College",
    TITLE = "Shakespeare and the English he wrote",
    TYPE = "MA thesis",
    YEAR = "2008"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

答案1

您应该使用 biber 作为 biblatex 的后端来执行此类操作。然后就很容易了。将其添加到您的序言中:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pertype{thesis}
       \step[fieldsource=institution, match=\regexp{\A.+\.\s*(.+)\z}, replace=\regexp{$1}]
    }
  }
}

既然您提到这是针对样式的,您实际上应该使用\DeclareStyleSourcemap而不是\DeclareSourcemap(语法相同,只需替换宏调用)。然后可以将其放入您的样式文件中。

相关内容