我的.bib
文件使用美国邮政编码作为美国各州的缩写(加利福尼亚州和马萨诸塞州分别使用 CA 和 MA)。对于我正在撰写的论文,需要将这些缩写更改为诸如Calif.
和Mass.
(参见维基百科)。
我不想更改我的.bib
文件,而是在我的序言中包含一条命令,该命令说“当文件LOCATION
中的条目.bib
包含诸如, CA
、, MA
等字符串时,则用、等替换它们, Calif.
” , Mass.
。 (我在字符串前添加了一个逗号和空格,以确保它不会捕获任何不是美国州的两个字母的字符串 - 我现在不知道那会是什么,但以防万一)。
梅威瑟:
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@BOOK{lehiste1970,
AUTHOR = "Ilse Lehiste",
TITLE = "Suprasegmentals",
YEAR = "1970",
LOCATION = "Cambridge, MA",
PUBLISHER = "The M.I.T. Press"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{lehiste1970}
\printbibliography
\end{document}
应为
Lehiste,Ilse(1970 年)。超音段.马萨诸塞州剑桥:麻省理工学院出版社。
答案1
这是一个概念证明。
\begin{filecontents}{\jobname.bib}
@BOOK{lehiste1970,
AUTHOR = "Ilse Lehiste",
TITLE = "Suprasegmentals",
YEAR = "1970",
LOCATION = "Cambridge, MA",
PUBLISHER = "The M.I.T. Press"}
@BOOK{mehiste1970,
AUTHOR = "Ilse Mehiste",
TITLE = "Suprasegmentals",
YEAR = "1970",
LOCATION = "San Francisco, CA",
PUBLISHER = "The California Press"}
\end{filecontents}
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=location,
match=\regexp{,\s*(MA|CA)},
replace=\regexp{,~\\State\{$1\}}]
}
}
}
\addbibresource{\jobname.bib}
\def\State#1{\csname State#1\endcsname}
\def\StateMA{Mass.}
\def\StateCA{Calif.}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
MA
我认为,与其用 来替换,不如Mass.
用 来替换\State{MA}
,这样就可以给出定义(并随意修改)。