我将 tufte-latex 与 BibLaTeX 结合使用,如 我可以将 biblatex 与 Tufte 课程一起使用吗?我已经尝试了问题和答案中建议的变体。使用基于 biblatex 选项的变体autocite=footnote
,我得到了更好的结果,当引用多次使用时,引用的版本更短,但我无法像重新定义命令那样微调附注与引用的位置cite
。另一方面,重新定义的cite
命令总是为我提供完整版本的引用,并且页边空白处很快就会被引用淹没。
平均能量损失
\documentclass[nobib]{tufte-handout}
\usepackage{hyphenat}
\usepackage[backend=biber,
autocite=footnote,
citecounter=true,
style=verbose,
citetracker=true
]{biblatex}
%redefinition of cite command
\renewcommand{\cite}[2][0pt]{\sidenote[][#1]{\fullcite{#2}}}
\addbibresource{biblatex-examples.bib}
\begin{document}
This,\autocite{springer} should be a side note and this\autocite{springer} should too.
This,\cite{springer} should be a side note and this\cite[2cm]{springer} should be a shifted down side note.
\printbibliography
\end{document}
输出:
所以我的问题是:是否有可能以某种方式获取使用该autocite
命令生成的侧注的可控制位置?
答案1
一种(至少我认为)优雅并且相当实用的方法是使用一个新命令,比如说\sidecite
。
它将使用与所有命令相同的语法,但在开头\cite
带有一个可选的偏移参数。<>
我们将使用xparse
来实现它。
\footcite
首先,我们从相关.cbx
样式文件(在您的情况下)复制的定义verbose.cbx
,将其重命名为\sidecitehelper
并替换\mkbibfootnote
为\bibfootnotewrapper
(因此我们实际上并没有得到脚注,而是一致的输出)。
\DeclareCiteCommand{\sidecitehelper}[\bibfootnotewrapper]
{\usebibmacro{prenote}%
\toggletrue{blx@footnote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{\multicitedelim}
{\usebibmacro{cite:postnote}}
然后我们定义\sidecite
\ExplSyntaxOn
\NewDocumentCommand\sidecite{D<>{}O{}om}{%
\iftoggle{blx@footnote}
{\cs_set_protected_nopar:Npn \__sct_wrapper:nn ##1 ##2 {\mkbibparens{##2}}}
{\cs_set_protected_nopar:Npn \__sct_wrapper:nn ##1 ##2 {\sidenote[][##1]{##2}}}
{\IfNoValueTF{#3}
{\__sct_wrapper:nn{#1}{\sidecitehelper[#2]{#4}}}
{\__sct_wrapper:nn{#1}{\sidecitehelper[#2][#3]{#4}}}}
}
\ExplSyntaxOff
使用此更新的定义,\sidecite
我们现在可以检查是否处于边注(脚注)中,如果是,则只需将引文括在括号中,而不是创建嵌套的脚注/边注。我们有一个虚拟命令\__sct_wrapper:nn
,在脚注中,它只将内容括在括号中,而在脚注之外则创建边注。在biblatex
命令中\mkbibfootnote
处理这个问题,如果我们不想\sidenote
采用其可选参数,使用包装器命令镜像的方法\mkbibfootnote
会更容易;但由于我们需要可选参数,所有这些处理都已移至\sidecite
。
还有一个问题:默认情况下tufte-latex
,命令\footnote
不能被修补biblatex
,所以我们需要自己修补。我们使用xpatch
为了那个原因
\makeatletter
\xpatchcmd{\@footnotetext}%
{\color@begingroup}
{\color@begingroup\toggletrue{blx@footnote}}
{}
{}
\makeatother
平均能量损失
\documentclass[nobib]{tufte-handout}
\usepackage{xparse}
\usepackage{xpatch}
\usepackage[
style=verbose,
autocite=footnote,
backend=biber
]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\xpatchcmd{\@footnotetext}%
{\color@begingroup}
{\color@begingroup\toggletrue{blx@footnote}}
{}
{}
\makeatother
\DeclareCiteCommand{\sidecitehelper}[\bibfootnotewrapper]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{\multicitedelim}
{\usebibmacro{cite:postnote}}
\ExplSyntaxOn
\NewDocumentCommand\sidecite{D<>{}O{}om}{%
\iftoggle{blx@footnote}
{\cs_set_protected_nopar:Npn \__sct_wrapper:nn ##1 ##2 {\mkbibparens{##2}}}
{\cs_set_protected_nopar:Npn \__sct_wrapper:nn ##1 ##2 {\sidenote[][##1]{##2}}}
{\IfNoValueTF{#3}
{\__sct_wrapper:nn{#1}{\sidecitehelper[#2]{#4}}}
{\__sct_wrapper:nn{#1}{\sidecitehelper[#2][#3]{#4}}}}
}
\ExplSyntaxOff
\begin{document}
This,\sidecite[8]{springer} should\autocite{springer} be a side note and this\sidecite[see][8]{springer} should too.
Lorem ipsum\sidecite<2cm>[9]{geer} dolor\sidecite[cf.][]{springer}.
Sit\sidenote{amet \sidecite{geer}}.
\printbibliography
\end{document}
请注意脚注 3 ( ) 的 2cm 偏移\sidecite<2cm>[9]{geer}
,以及biblatex
脚注 1 ( \sidecite[8]{springer}
) 中标准引用命令的自然“如果只有一个可选参数,则为后注”行为。\sidecite
脚注 6 ( \sidenote{amet \sidecite{geer}}
) 中的引用变为括号中的引用,以避免嵌套脚注。