使用 biblatex 将部分标题变为大写

使用 biblatex 将部分标题变为大写

我正在尝试替换biblatexabntex2cite 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 的宽度来实现它,如果宽度太小则循环。或者像示例中那样,您可以简单地保护要忽略的空间。

相关内容