在 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”。返回頁面?

也就是說,以某種方式禁用這個具體命令的一般選項,我用更新命令等。

答案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 將報告錯誤。您可以做的是定義一個新的圍兜巨集。例如,使用您的定義作為起點(並進行調整以將(短)標題置於斜體中):

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

相關內容