在 \DeclareSourcemap 中使用宏

在 \DeclareSourcemap 中使用宏

我想使用 从巨大的 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在宏中包含特殊字符串()的解决方案,但如果我能做到,我会在这里添加一些信息。

相关内容