我想使用 从巨大的 bib 文件中过滤出单个作者的出版物\DeclareSourcemap
。因此,作者姓名应该可以用宏来配置。如何做到这一点,因为常规使用方法\newcommand
似乎不起作用?
最小工作示例:
\begin{filecontents}{\jobname.bib}
@BOOK{foo:2012a,
title = {My Title One},
publisher = {My Publisher One},
year = {2012},
author = {Schmidt, Achim}
}
@BOOK{foo:2012d,
title = {My Title Three},
publisher = {My Publisher Three},
year = {2012},
author = {Author, Three}
}
\end{filecontents}
\documentclass{article}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\newcommand{\lastname}{Schmidt}
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite=true]{
\map{
\step[fieldsource=author, notmatch=\regexp{\lastname},final]%not working
%\step[fieldsource=author, notmatch=\regexp{Schmidt},final]%working
\step[entrynull]
}}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案1
由于没有其他评论,我将尝试得出解决方案:
我们必须区分两种情况:
简单名称过滤
在这种情况下,不需要正则表达式,可以定期使用宏:
\step[fieldsource=author, notmatch=\lastname,final]
高级正则表达式
在这种情况下,字符串可以分为常规字符串值(其中可以使用宏)和特殊字符串,例如:
\step[fieldsource=author, notmatch=\regexp{\A}\lastname\regexp{\Z},final]
宏内特殊字符串的使用
到目前为止,我还没有找到\A
在宏中包含特殊字符串()的解决方案,但如果我能做到,我会在这里添加一些信息。