使用 biblatex 使引用中的 prenote 大写更简单的方法?

使用 biblatex 使引用中的 prenote 大写更简单的方法?

在此邮政\autocap{s}ee我得到了在引文中使用建议,例如\autocite[\autocap{s}ee][5][ref]将字母“s”的上下文相关大写。因此,如果我从内联引文切换到脚注引文,单词“see”将被写为“See”。

但是把所有参考文献都写进去有点麻烦\autocap。有没有办法把这个命令集成到例如\usebibmacro{pre note}或创建一个新的 bibmacro 中,例如prenotecap?然后我会定义:

\DeclareCiteCommand{\parencite}[\mkbibparens]
    {\usebibmacro{prenotecap}}
    {\usebibmacro{citeindex}%
        \printtext[brackets]{\usebibmacro{cite} \usebibmacro{postnote}}}
    {\multicitedelim}
    {}

我就完成了。

如果有人能提示如何管理,那就太好了\newbibmacro,因为我在 biblatex 用户指南中找不到相关解释。

编辑: 因此,这里有一个 MWE,它应该清楚地说明我想要实现的目标。如果我使用,单词“see”应该打印为“See”,autocite=footnote如果我使用,则打印为“see” autocite=inline。但我不想\autocap对每个参考都使用。

\documentclass{article}
\usepackage[style=alphabetic, autocite=footnote]{biblatex}

\DeclareCiteCommand{\footcite}[\mkbibfootnote]
    {\usebibmacro{prenote}}
    {\usebibmacro{citeindex}%
        \printtext[brackets]{\usebibmacro{cite} \usebibmacro{postnote}}}
    {\multicitedelim}
    {}  

\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]%
    {\footcite}{\multicitedelim}

\DeclareAutoCiteCommand{footnote}[l]{\footcite}{\footcites}

\begin{filecontents*}{bibliography.bib}
@BOOK{Cornelisse1979,
  author = {Cornelisse, J. W. and Schöyer, H. Ferry R. and Wakker, Karel F.},
  title = {Rocket Propulsion and Spaceflight Dynamics},
  year = {1979},
  publisher = {Pitman},
}
\end{filecontents*}

\bibliography{bibliography.bib}

\begin{document}
\null
\vfill

How the citation look like: \autocite[see][35]{Cornelisse1979}
How it should look like: \autocite[\autocap{s}ee][35]{Cornelisse1979}
\end{document}

答案1

biblatex包定义了一个\MakeSentenceCase宏来处理大写问题,您只需告诉 bibmacro 使用它即可。我首先定义一个字段格式\MakeSentenceCase,然后修补 bibmacro 以将字段格式与字段一起使用prenote。我使用xpatch包来执行此操作,但修补宏的方法有很多。您只需在使用时将以下代码添加到您的序言中即可autocite=footnote

\DeclareFieldFormat{sentencecase}{\MakeSentenceCase{#1}}
\usepackage{xpatch}
\xpatchbibmacro{prenote}{\printfield{prenote}}{\printfield[sentencecase]{prenote}}{}{}

使用 时,您必须删除代码autocite=inline。可能有一种方法可以根据 的值自动执行此操作autocite,但我不明白如何使用该选项。

完整的 MWE:

\documentclass{article}
\usepackage[style=alphabetic, autocite=footnote]{biblatex}

\DeclareCiteCommand{\footcite}[\mkbibfootnote]
    {\usebibmacro{prenote}}
    {\usebibmacro{citeindex}%
        \printtext[brackets]{\usebibmacro{cite} \usebibmacro{postnote}}}
    {\multicitedelim}
    {}  

\DeclareFieldFormat{sentencecase}{\MakeSentenceCase{#1}}
\usepackage{xpatch}
\xpatchbibmacro{prenote}{\printfield{prenote}}{\printfield[sentencecase]{prenote}}{}{}


\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]%
    {\footcite}{\multicitedelim}

\DeclareAutoCiteCommand{footnote}[l]{\footcite}{\footcites}

\begin{filecontents*}{bibliography.bib}
@BOOK{Cornelisse1979,
  author = {Cornelisse, J. W. and Schöyer, H. Ferry R. and Wakker, Karel F.},
  title = {Rocket Propulsion and Spaceflight Dynamics},
  year = {1979},
  publisher = {Pitman},
}
\end{filecontents*}

\bibliography{bibliography.bib}

\begin{document}

\null
\vfill

How the citation look like: \autocite[see][35]{Cornelisse1979}
How it should look like: \autocite[\autocap{s}ee][35]{Cornelisse1979}
\end{document}

相关内容