将 editortype 字段大写

将 editortype 字段大写

我希望字段的首字母editortype在参考书目中始终为大写。

所以我尝试了这个:

平均能量损失

\begin{filecontents}{\jobname.bib}
@book{batman, editor = {Batman}}
\end{filecontents}

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}

\DeclareFieldFormat{editortype}{\MakeCapital{#1}}

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

它打印:

蝙蝠侠,编辑。

而我想要的是:

蝙蝠侠,埃德。


biblatex的手册描述了该\MakeCapital命令:“类似于 \MakeUppercase,但仅将 ⟨text⟩ 中的第一个可打印字符转换为大写。”所以我希望它能起作用,但事实并非如此。

与此同时,改变editortype以其他方式更改字段格式工作……如果我做的话,\emph{#1}这个领域就会得到强调。

自从\MakeCapital不起作用,我还尝试使用命令在这个答案中,但它仍然不起作用,并且字段变得一团糟。 (也许我做错了什么。)

有任何想法吗?

答案1

如果您无论如何修改editor宏,您可以从\bibstring提供上下文相关的大写切换到\bibcpstring始终大写。

例如

\makeatletter
\renewbibmacro*{editor+othersstrg}{%
  \iffieldundef{editortype}
    {\ifboolexpr{
       test {\ifnumgreater{\value{editor}}{1}}
       or
       test {\ifandothers{editor}}
     }
       {\def\abx@tempa{editors}}
       {\def\abx@tempa{editor}}}
    {\ifboolexpr{
       test {\ifnumgreater{\value{editor}}{1}}
       or
       test {\ifandothers{editor}}
     }
       {\edef\abx@tempa{\thefield{editortype}s}}
       {\edef\abx@tempa{\thefield{editortype}}}}%
  \let\abx@tempb=\empty
  \ifnamesequal{editor}{translator}
    {\appto\abx@tempa{tr}%
     \appto\abx@tempb{\clearname{translator}}}
    {}%
  \ifnamesequal{editor}{commentator}
    {\appto\abx@tempa{co}%
     \appto\abx@tempb{\clearname{commentator}}}
    {\ifnamesequal{editor}{annotator}
       {\appto\abx@tempa{an}%
        \appto\abx@tempb{\clearname{annotator}}}
       {}}%
  \ifnamesequal{editor}{introduction}
    {\appto\abx@tempa{in}%
     \appto\abx@tempb{\clearname{introduction}}}
    {\ifnamesequal{editor}{foreword}
       {\appto\abx@tempa{fo}%
        \appto\abx@tempb{\clearname{foreword}}}
       {\ifnamesequal{editor}{afterword}
          {\appto\abx@tempa{af}%
           \appto\abx@tempb{\clearname{afterword}}}
          {}}}%
  \ifbibxstring{\abx@tempa}
    {\printtext[editortype]{\bibcpstring{\abx@tempa}}\abx@tempb}
    {\usebibmacro{editorstrg}}}
\makeatother

但是,有好几个地方你必须将\bibstrings改为\bibcpstrings,因此这可能会导致大量代码堆积,而只需进行少量更改。当然,你可以使用xpatch包裹修补宏,上面的示例可以简化为

\usepackage{xpatch}
\makeatletter
\xpatchbibmacro{editor+othersstrg}
  {\bibstring{\abx@tempa}}
  {\bibcpstring{\abx@tempa}}
  {}{\typeout{could not patch editor+othersstrg for uppercase strings}}
\makeatother

但你也可以偷偷地把一个\bibsentence放进editortype格式中。我认为这不是最好的解决方案,但可能是最实用的(比上面的替代方案短得多)

\DeclareFieldFormat{editortype}{\bibsentence#1}

相关内容