我正在尝试替换biblatex
该abntex2cite
bibtex
包(适合巴西规范的包),其中一个要求是,在没有作者的情况下,标题应该作为键,第一个单词大写(如果第一个单词是文章或者太短,则使用前几个单词)。
我尝试了一下并设法在这些情况下将整个标题变为大写,但我不知道如何仅对第一个单词(或必要时的前几个单词)进行大写。
这是一个最小工作示例:
\begin{filecontents}{\jobname.bib}
@article{theeffect,
title = {The Effect of Country Music on Suicide},
%author = {Steven Stack and Jim Gundlach},
journaltitle = {Social Forces},
volume = {71},
number = {1},
pages = {211-218},
year = {1992},
month = {9}}
\end{filecontents}
\documentclass{article}
\usepackage[backend=biber, bibstyle=standard, citestyle=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\DeclareFieldFormat[article]{title}{#1\isdot}
\DeclareFieldFormat{uppercase}{\MakeUppercase{#1}}
\renewbibmacro*{cite:label}{%
\iffieldundef{label}
{\printtext[bibhyperref]{\printfield[uppercase]{labeltitle}}}
{\printtext[bibhyperref]{\printfield{label}}}}
\renewbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\ifnameundef{author}{
\printfield[uppercase]{title}}
{\printfield[titlecase]{title}}
\setunit{\subtitlepunct}%
\printfield[titlecase]{subtitle}}%
\newunit}%
\printfield{titleaddon}}
\begin{document}
``The greater the airtime devoted to country music, the greater the white suicide rate.'' \cite{theeffect}
\printbibliography
\end{document}
这会在引文和参考书目条目中将标题打印为“乡村音乐对自杀的影响”,而我需要的只是引文中的“影响”和参考书目中的“乡村音乐对自杀的影响”。
我认为可能有一些特殊biblatex
字段(label
?、shorttitle
?、shorthand
?)我可以使用……如果我能得到这些结果,那就太好了。但如果有一种方法可以在不使用任何特殊字段的情况下做到这一点,那就更好了,这样已经使用的人abntex2cite
在转移到 biblatex 时就不必更改所有条目。
附言:我不知道自己在做什么,所以如果有更好的方法来完成代码中的任何内容,请告诉我。
答案1
您的核心问题是将单词列表中的一部分大写。这并不难(可能需要使命令对参考书目更强大)。
\documentclass{article}
\makeatletter
\newcommand\FirstWordUpper[1]{\@firstwordupper#1 \@nil}
\newcommand\@firstwordupper{}
\def\@firstwordupper#1 #2\@nil{\MakeUppercase{#1} #2\unskip}
\makeatother
\begin{document}
\FirstWordUpper{test word test}!
\FirstWordUpper{test\space word test}!
\FirstWordUpper{{test word} test}!
\FirstWordUpper{test. test test}!
\FirstWordUpper{}!
\FirstWordUpper{test}!
\FirstWordUpper{$\alpha$-test xxx} blblb
\end{document}
第二部分是“前几个单词”的要求。您可以通过测量 #1 的宽度来实现它,如果宽度太小则循环。或者像示例中那样,您可以简单地保护要忽略的空间。