我的文件@thesis
中的条目包含有关部门和学校的字段信息。我正在为期刊创建样式表,其中只需要学校名称(即大学、学院、模拟)。.bib
institution
因此,我正在寻找一些代码来扫描条目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
(语法相同,只需替换宏调用)。然后可以将其放入您的样式文件中。