我需要为我的博士论文制定自定义引用命令。
我到目前为止做的是:
\newcommand{\sfootcite}[1]{\footnote{\emph{\citename[2]{#1}{shortauthor}}, \citefield{#1}{shorttitle}}}
如果我的引用如下所示,则效果很好:
\sfootcite{iustinus1997}
问题是我在条目名称前有两个可选参数。我的引用如下所示:
\sfootcite[参见][第 8 页]{iustinus1997}
我如何获取新命令以使引用看起来如下所示:
参见作者、标题、第 8 页
基本上我的问题是:如何将 {iustinus1997} 之前的 [][] 中的内容包含在新的 cite 命令中?
这是我的 MWE:
\documentclass[a4paper,11pt]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage{csquotes}
\usepackage{blindtext}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{iustinus1997,
Address = {Berlin/New York},
Author = {{Iustinus Martyr}},
Call-Number = {EgI180},
Date-Added = {2010-10-13 09:19:34 +0200},
Date-Modified = {2010-10-13 09:21:42 +0200},
Editor = {Miroslav Marcovich},
Publisher = {Walter de Gruyter},
Series = {Patristischen Texte und Studien},
Shortauthor = {Iust.},
Shorttitle = {De Tryph.},
Title = {Iustini Martyris dialogus cum Tryphone},
Volume = {47},
Year = {1997}}
\end{filecontents}
\newcommand{\sfootcite}[1]{\footnote{\emph{\citename[2]{#1}{shortauthor}}, \citefield{#1}{shorttitle}}}
\usepackage[ngerman]{babel}
\usepackage[style=authoryear, hyperref=true]{biblatex}
\bibliography{\jobname}
\begin{document}
\blindtext \sfootcite{iustinus1997}
\blindtext
\printbibliography
\end{document}
答案1
我必须同意 pst 的评论,看起来你似乎试图使用两种不一致的引用方案;但我认为你想对某些作品(例如主要文本)使用作者/标题方案,对其他作品使用作者/年份方案。如果不是这样,而你想要的是作者/标题方案,那么最好从一开始就使用这个方案。
无论如何,如果您确实需要这个特定命令,我大致会这样做。
首先,我们定义一个特定的书目驱动程序。这里有一些陷阱,因为如果(例如)你没有短作者或短标题会发生什么?它被定义,以便(在这种情况下)它会回到作品的“标准”驱动程序。这可能不是你想要的,但你需要决定你做在这种情况下,我们想要什么。编写自定义样式就是预测不可预测的事情。
\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}%
}
基本上,这会查看您是否有shortauthor
和shorttitle
字段。如果没有,它会返回到标准驱动程序。如果有,它会打印两者,中间有一个逗号,并将您在短标题末尾使用的句号“转换”为“缩写点”,这样就可以在后记中在其后放置逗号。
完成后,我们定义一个将使用该驱动程序的“正确”引用命令。它有四个强制参数和一个可选参数:强制参数指定 (a) 引用前使用的代码(即前注)、(b) 每次引用调用的“循环代码”;(c) 每次引用之间调用的分隔代码,以及 (d) 引用末尾使用的代码(即处理后注)。可选参数用于“包装”整个引用(如果需要)(例如将其放在括号中,或者像本例中一样放在脚注中)。
\DeclareCiteCommand{\mycite}[\mkbibfootnote]
{\usebibmacro{prenote}}
{\usedriver{}{myshort}}
{\multicitedelim}
{\usebibmacro{postnote}}
现在\mycite
将像普通的引用命令一样运行,调用myshort
驱动程序,并将所有内容包装在脚注中。所以
\mycite[See][11]{iustinus1997}
产生如下图所示的脚注。
如果我要实际使用它,我会花更多的时间来确保我的引用命令不需要做其他“内务管理”,这意味着要努力authoryear.cbx
确保它或多或少与它兼容。