在 biblatex 中创建自己的 cite 命令

在 biblatex 中创建自己的 cite 命令

我有以下问题:我需要一种非常简单的“双重引用系统”。对于普通文献,我在 biblatex 中使用作者年份样式没有问题。我做了以下小改动:

\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
\renewcommand{\postnotedelim}{\addcolon\space}
\DeclareFieldFormat{postnote}{#1}

现在的问题是我想以不同的方式(不是作者年份)引用旧书(近代时期),如下所示:

 Shortauthor, *shorttitle*, p. 124

我认为一个解决方案是编写自己的 cite 命令,如下所示,它似乎效果很好:

\DeclareBibliographyDriver{myshort}{%
 \usebibmacro{begentry}%
  \ifboolexpr{ test{\ifnameundef{shortauthor}} 
            or test {\iffieldundef{shorttitle}}}
   {\usedriver{}{\thefield{entrytype}}}
   {\printnames{shortauthor}%
    \setunit{\addcomma\space}%
    \printfield{shorttitle}\isdot}%
    \usebibmacro{finentry}%
  }

  \DeclareCiteCommand{\mycite}[\mkbibfootnote]
   {\usebibmacro{prenote}}
   {\usedriver{}{myshort}}
   {\multicitedelim}
    {\usebibmacro{postnote}}

(这是我的实际问题):有没有办法:

  • 禁用作者的小写字母?
  • 把标题用草书写吗?
  • 找回表示页面的“p.”吗?

也就是说,以某种方式禁用这个具体命令中我使用 renewcommands 等命令所设置的常规选项。

答案1

对于这种情况的一个有用技巧是创建一个切换开关,当您输入命令时将其打开,而当您离开命令时将其关闭:

\newtoggle{mycite}

\renewcommand*{\mkbibnamelast}[1]{\iftoggle{mycite}{#1}{\textsc{#1}}}
\renewcommand{\postnotedelim}{\iftoggle{mycite}{\addcomma\addspace}{\addcolon\space}}
\DeclareFieldFormat{postnote}{#1}

然后,当你定义新的 cite 命令时:

\DeclareCiteCommand{\mycite}[\mkbibfootnote]
   {\toggletrue{mycite}\usebibmacro{prenote}}
   {\usebibmacro{mycite}}
   {\multicitedelim}
   {\usebibmacro{postnote}\togglefalse{mycite}}

顺便说一句,您不能 \usedriver{}{\thefield{entrytype}在 的定义中使用\DeclareBibliographyDriver:它将进入无限循环,TeX 将报告错误。您可以做的是定义一个新的 bib 宏。例如,使用您的定义作为起点(并调整为将(短)标题放在首字母中):

\newbibmacro{mycite}{
   \ifboolexpr
     {test {\ifnameundef{shortauthor}} or
      test {\iffieldundef{shorttitle}}}
     {\usedriver{}{\thefield{entrytype}}} 
     {\printnames{shortauthor}%
     \setunit{\addcomma\space}%
     \mkbibemph{\printfield{shorttitle}}}
}

相关内容