如何将 fnpct 与可调整偏移的 footcite 命令结合起来?

如何将 fnpct 与可调整偏移的 footcite 命令结合起来?

tufts-book 类提供了一个\sidenote带有可选偏移参数的 -command,允许垂直调整侧注。我使用 biblatex\footcite命令来获取页边距中的引文。如果引文靠近底部,则引文位于文本下方或超出页面范围(代码稍后发布):

图片显示了页边距中的引用如何位于文本最后一行的下方。

使用来自的答案这个问题我添加了一个引用命令,允许手动偏移边距引用:

图片显示边注引文与文本最后一行对齐

问题是

  • 您需要根据基线跳过和引用行数手动计算偏移量
  • 引文标记和(可选)标点符号之间的字距调整无法通过 fnpct 处理

tufte-latex 文档指出,当侧注超出页面顶部或底部时,会专门添加 -command 的偏移参数\sidenote,因此我认为不可能将侧注限制在文本高度。

我的问题:是否有可能有一个引用命令

  • 可以使用 fnpct 调整字距
  • 导致边注引用
  • 可以传递偏移参数(或适当调整其垂直偏移)

如果不是,我目前的方法需要传递一个可选的标点符号,引用标记应该与该标点符号对齐。语法相当混乱(见以下代码)。有人有更好的主意吗?

\documentclass[a4paper,nobib]{tufte-book}
\usepackage[autocite=footnote,style=verbose,backend=biber]{biblatex}
\usepackage{xparse}
\usepackage{xpatch}

\DeclareCiteCommand{\sidecitehelper}
  {\usebibmacro{prenote}\toggletrue{blx@footnote}}
  {\usebibmacro{citeindex}\usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{cite:postnote}}

\newlength{\spc}
\DeclareDocumentCommand{\sjcitep}{ O{} O{0pt} m O{} }{%
  \settowidth{\spc}{#4}%
  \addtolength{\spc}{-1.8\spc}%
  #4\hspace*{\spc}\sidecite<#2>[#1]{#3}%
}

\ExplSyntaxOn
\NewDocumentCommand\sidecite{D<>{}O{}omo}{%
  \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

\makeatletter
\xpatchcmd{\@footnotetext}%
      {\color@begingroup}
      {\color@begingroup\toggletrue{blx@footnote}}
      {}
      {}
\makeatother

\addbibresource{biblatex-examples.bib}


\begin{document}
\vspace*{\fill}
Margin baselineskip: {\footnotesize\the\baselineskip}\\
Baselineskip: \the\baselineskip\\
Test sentence\sjcitep[6][-42pt]{springer}[.]


Test sentence\sjcitep[][-16pt]{springer}[,]

Test sentence\sjcitep[][-10pt]{springer} and so on and so on.
\end{document}

附言:我知道我的问题不够简洁。我很抱歉。我不太了解 LaTeX,并且想避免用 替换所有\footcite{}<punctuation>-commands \sjcitep{}[<punctuation>]

答案1

我认为五年前提出这个问题时没有一个简单的解决方案。今天你可能会想到这样的事情:

\documentclass[a4paper,nobib]{tufte-book}
\usepackage[style=verbose]{biblatex}
\usepackage{fnpct}
\setfnpct{
  after-punct-space = 0pt ,
  before-footnote-space = .1em
}

\addbibresource{biblatex-examples.bib}

\NewDocumentCommand\sidecite{d()oom}{%
  \IfNoValueTF{#1}
    {\sidenote}
    {\sidenote[][#1]}%
    {%
      \IfNoValueTF{#2}
        {\cite{#4}}
        {%
          \IfNoValueTF{#3}
            {\cite[#2]{#4}}
            {\cite[#2][#3]{#4}}%
        }%
    }%
}

\begin{document}

\vspace*{\fill}

Test sentence\sidecite(-44pt){companion}.

Test sentence\sidecite(-12pt)[see][135]{companion},

Test sentence\sidecite{companion} and so on and so on.

\end{document}

在此处输入图片描述

由于biblatex它相当复杂,所以我无法说它是否存在缺点。

相关内容