我有以下问题:我需要一种非常简单的“双重引用系统”。对于普通文献,我在 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}}}
}