biblatex:字段的第一个字符是什么?

biblatex:字段的第一个字符是什么?

我想知道编辑器字段值的第一个字符是什么。如果字符是花括号“{”,则应打印该值(例如粗体),如果第一个字符是其他字符,则应打印字段值\textnormal

我尝试使用包 xstring 和 biblatex 声明中的以下代码来做到这一点:

\IfBeginWith{editor}{\{}{\textbf{\printfield{editor}}}{\printfield{editor}}

但这不会改变任何东西。该怎么做才正确?

答案1

看来您应该了解 中的数据类型biblatexeditor是名称列表类型,而不是字段类型。 有关如何访问名称列表中的数据的一些详细信息,请参阅 上的文档\DeclareNameFormat。 您使用 的方法是正确的xstring,但在传递参数时需要更加小心。

以下代码将以biblatex粗体打印出任何公司编辑器(即任何括在括号中的编辑器名称 - 请参阅手册第 2.3.3 节,版本 1.4b)。我已经对通用biblatex格式和宏定义进行了编辑,但根据您使用的样式,此解决方案可能需要进行调整。

\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{xstring}
\usepackage{filecontents}

\DeclareNameFormat{byeditor}{%  Based on first-last format from biblatex.def
  \iffirstinits
    {\usebibmacro{ename:first-last}{#1}{#4}{#5}{#7}}
    {\usebibmacro{ename:first-last}{#1}{#3}{#5}{#7}}%
  \usebibmacro{name:andothers}}

\newbibmacro*{ename:first-last}[4]{%  Basd on name:first-last macro from biblatex.def
    \usebibmacro{name:delim}{#2#3#1}%
    \usebibmacro{name:hook}{#2#3#1}%
    \ifblank{#2}{}{\mkbibnamefirst{#2}\isdot\bibnamedelimd}%
    \ifblank{#3}{}{%
        \mkbibnameprefix{#3}\isdot
        \ifpunctmark{'}
            {}
            {\ifuseprefix{\bibnamedelimc}{\bibnamedelimd}}}%
    \noexpandarg\StrRemoveBraces{#1}[\mycsnb]%
    \noexpandarg\StrFindGroup{#1}{1}[\mycsfg]%
    \ifblank{#2#3#4}
        {\ifdefstring{\mycsnb}{#1}
            {\mkbibnamelast{#1}}
            {\ifdefstring{\mycsfg}{#1}{\mkbibbold{#1}}{\mkbibnamelast{#1}}}}
        {\mkbibnamelast{#1}}\isdot
    \ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}}

\begin{filecontents}{\jobname.bib}
@Book{companion,
    author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
    title = {The LaTeX Companion},
    edition = {1},
    editor = {{Corporate Editor} and {A}ristotle and \texttt{HAL}},
    publisher = {Addison-Wesley},
    location = {Reading, Mass.},
    date = {1994}}
@Article{gillies,
    author = {Gillies, Alexander and {Corporate Author}},
    title = {Herder and the Preparation. Goethe's Idea of World Literature},
    journaltitle = {Publications of the English Goethe Society},
    volume = {9},
    date = {1933},
    editor = {Lastname, Firstname and {Corporate Editor} and {Corporation}},
    pages = {46--67}}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

关于代码的一些注释:

  • 公司名称传递给姓氏参数(始终为 #1)。所有其他名称参数(例如名字、名称前缀等)均为空。
  • 括号内的字符串无法xstring进行任何直接的字符串比较。我改用其他命令来检测公司名称xstring
  • \ifdefstring测试控制序列是否等于字符串。此测试来自etoolbox包,由 加载biblatex

相关内容