如果存在 multicitedelim 则删除 finentrypunct

如果存在 multicitedelim 则删除 finentrypunct

我目前正在为历史博士论文在 biblatex 中确定引文样式。要求的引文样式有时有点...奇怪。这导致我遇到以下问题:

所有引文在脚注中的引用与参考书目中的引用几乎相同。默认情况下,这些引文以句号结尾,即\finentrypunct其默认值。现在,假设我有一个引用命令,例如

\cites{LitA}{LitB}

当前的行为是这样的引用

Author A: Some interesting book, Somewhere 2016. Author B: Another even more interesting book, Somewhere else 2005. 

我想存档的\finentrypuct只是在这些情况下用分号替换,即我想得到

Author A: Some interesting book, Somewhere 2016; Author B: Another even more interesting book, Somewhere else 2005. 

我知道我可以重新定义\multicitedelim,但是这会使我在句号后留下一个分号,而且我认为没有办法预先删除句号。

有任何想法吗?

答案1

如果您只是\finentrypunct通过直接调用\finentrypunct(或\finentry执行\finentrypunct)来排版,就会出现此问题。一旦排版了标点符号,就没有简单的方法可以将其删除。

现在,最简单的biblatex解决方案是放置\finentrypunct一个\setunit-,就像大多数标点符号一样。但是,这不会正常工作,因为我们无法保证biblatex在 之后打印一些内容\setunit。如果没有,那么标点符号就会丢失。

标准样式通过简单地不使用\finentrypunct引用来解决此问题。

针对您的自定义风格的解决方案就是执行相同的操作。

  • 不要在引用命令中使用\finentrypunct(或)。\finentry
  • 然后设置\renewcommand*{\multicitedelim}{\addsemicolon\space}
  • 最后,使用包装器将句号放在最后一个引用之后。这反映了\bibfootnotewrapper和朋友们的做法。

    • 定义\newcommand*{\citepunctwrapper}[1]{#1\addperiod}
    • 用作\cite包装器

      \DeclareCiteCommand{\cite}[\citepunctwrapper]
        {\usebibmacro{prenote}}%
        {\usebibmacro{citeindex}%
         \usebibmacro{cite}}
        {\multicitedelim}
        {\usebibmacro{postnote}}
      

      以及\cites

        \DeclareMultiCiteCommand{\cites}[\citepunctwrapper]{\cite}{\multicitedelim}
      

平均能量损失

\documentclass{article}
\usepackage[backend=biber, style=verbose]{biblatex}
\addbibresource{biblatex-examples.bib}

\renewcommand*{\multicitedelim}{\addsemicolon\space}

\newcommand*{\citepunctwrapper}[1]{#1\addperiod}

\DeclareCiteCommand{\cite}[\citepunctwrapper]
  {\usebibmacro{prenote}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareMultiCiteCommand{\cites}[\citepunctwrapper]{\cite}{\multicitedelim}

\begin{document}
\cites{sigfridsson}{worman}
\end{document}

相关内容