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.」を取り戻しますか?

つまり、この具体的なコマンドに対して、renew コマンドなどで指定した一般的なオプションを何らかの方法で無効にする方法です。

答え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}}}
}

関連情報