我希望字段的首字母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
但是,有好几个地方你必须将\bibstring
s改为\bibcpstring
s,因此这可能会导致大量代码堆积,而只需进行少量更改。当然,你可以使用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}