biblatex-chicago (author-date) 在仅显示页码时显示重新定义的 postnotedelim

biblatex-chicago (author-date) 在仅显示页码时显示重新定义的 postnotedelim

使用时biblatex-chicago,如果使用\postnotedelim类似命令更改

\renewcommand*{\postnotedelim}{\addcolon\space}

并使用 TeX Live 2021 在 Overleaf 上进行编译,结果不太好。在 TeX Live 2020 或更早版本上编译相同的代码效果很好。

考虑以下 MWE:

\documentclass{article}

\usepackage[authordate]{biblatex-chicago}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@book{Jones2016,
    author = {Jones, John},
    title = {Title},
    date = {2016},
}

@book{Smith2018,
    author = {Smith, Sam},
    title = {Title},
    date = {2018},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\renewcommand*{\postnotedelim}{\addcolon\space}

\begin{document}

\textcite[9]{Jones2016} discusses cool things. 
Some have commented that he's the best \autocite[40]{Smith2018}. 
But later in his work, Jones really goes off the rails \autocite[100]{Jones2016}. 
And by the end of the book, he's talking complete nonsense \autocite[500]{Jones2016}

\end{document}

在 TeX Live 2020 中,一切都按预期进行: Overleaf 上使用 TeX Live 2020 编译的 MWE 图像

但是,使用 TeX Live 2021 进行编译时会出现以下结果:

Overleaf 上使用 TeX Live 2021 编译的 MWE 图像

标准的 first-mention\autocite命令可以很好地与后记配合使用,但\textcite呈现为Jones (2016: ), 9,并且\autocite带有后记的命令紧跟在同一作品的引用之后,会在括号中的页码前打印后记分隔符,而不是在没有分隔符的情况下在括号中打印页码。请注意,\renewcommand*{\postnotedelim}{\addcolon\addspace}无论我使用哪个版本的 TeX Live 进行编译,注释掉后的一切看起来都符合预期:

注释掉 renew 命令行后的输出图像。一切看起来都符合预期。

我不介意使用 2020 版 TeX Live 进行编译,但是\postnotedelim在较新的 TeX Live 发行版和/或上,是否有一种新的“正确方法”来为 biblatex-chicago声明全局变量biblatex-chicago

答案1

的当前版本中\postnotedelimfor的实际定义比核心中的简单定义稍微复杂一些。authordatebiblatex-chicago\DeclareDelimFormat{postnotedelim}{\addcomma\space}biblatexchicago-dates-common.cbx

\renewcommand*{\postnotedelim}{% Cf. N&B style
  \ifboolexpr{%
    test {\ifciteibid}%
    and
    (
    test {\ifentrytype{jurisdiction}}%
    or
    test {\ifentrytype{legal}}%
    or
    test {\ifentrytype{legislation}}%
    )
  }%
  {\addspace}%
  {\iftoggle{cms@inlineibid}%
    {\togglefalse{cms@inlineibid}%
      \iffieldundef{prenote}% Bug fix
      {}%
      {\setunit{\cms@testspace}}}%
    {\iffieldequalstr{entrysubtype}{classical}% For Notes+Bib, too?
      {\DeclareNumChars*{abcdeABCDE:}%
        \iffieldpages{postnote}%
        {\setunit{\cms@testspace}}%
        {\newcunit}}%
      {\newcunit}\DeclareNumChars{.}}}}

其中\newcunit本质上是\setunit{\addcomma\space}。因此,如果我们想要冒号,我们需要用\newcunit替换\setunit{\addcolon\space}

\documentclass{article}

\usepackage[authordate]{biblatex-chicago}

\addbibresource{biblatex-examples.bib}

\makeatletter
\renewcommand*{\postnotedelim}{% Cf. N&B style
  \ifboolexpr{%
    test {\ifciteibid}%
    and
    (
    test {\ifentrytype{jurisdiction}}%
    or
    test {\ifentrytype{legal}}%
    or
    test {\ifentrytype{legislation}}%
    )
  }%
  {\addspace}%
  {\iftoggle{cms@inlineibid}%
    {\togglefalse{cms@inlineibid}%
      \iffieldundef{prenote}% Bug fix
      {}%
      {\setunit{\cms@testspace}}}%
    {\iffieldequalstr{entrysubtype}{classical}% For Notes+Bib, too?
      {\DeclareNumChars*{abcdeABCDE:}%
        \iffieldpages{postnote}%
        {\setunit{\cms@testspace}}%
        {\setunit{\addcolon\space}}}%
      {\setunit{\addcolon\space}}\DeclareNumChars{.}}}}
\makeatother

\begin{document}

\textcite[9]{sigfridsson} discusses cool things. 
Some have commented that he's the best \autocite[40]{worman}. 
But later in his work, Jones really goes off the rails \autocite[100]{sigfridsson}. 
And by the end of the book, he's talking complete nonsense \autocite[500]{sigfridsson}

\end{document}

Sigfridsson 和 Ryde (1998: 9) 讨论了很酷的事情。有人评论说他是最好的 (Worman 2002: 40)。但在后来的作品中,琼斯真的偏离了轨道 (Sigfridsson 和 Ryde 1998: 100)。到书的结尾,他讲的完全是胡言乱语 (500)

答案2

查看chicago-dates-common.cbx文件moewe 的回答特别提到了\newcunit命令,看来的文本部分\newcunit由以下方式定义\newcunitpunct

\protected\def\blx@newcunit{%
  \iftoggle{blx@keepunit}%
  {}%
  {\global\let\blx@unitpunct\newcunitpunct
    \global\toggletrue{blx@unit}}}%

\appto\blx@blxinit{%
  \let\newcunit\blx@newcunit}%

\newcommand*{\newcunitpunct}{\addcomma\space}

添加\renewcommand*{\newcunitpunct}{\addcolon\space}我的序言正是我想要的。

再次感谢 moewe 向我指出适当的文件和适当的变量,使我能够到达我想要的地方。

更新:上述解决方案会产生意想不到的后果(正如@moewe 正确指出的那样),因此我的最终解决方案基本上是用regexpatchjust 来实现 @moewe 的答案,这样它占用的行数更少(尽管它可能会带来不必要的复杂性)。我把它放在这里只是为了完整性,但@moewe 的答案似乎是正确的做法。

\usepackage{regexpatch}

\makeatletter
\xpatchcmd*{\postnotedelim}{\newcunit }{\setunit{\addcolon \addspace} }{}{}
\makeatother

\newcunit(请注意,由于命令中有两个 实例,带星号的版本\xpatchcmd将替换两个\newcunit。)

我会将@moewe 的答案标记为正确,因为它不依赖于任何其他包,而只是明确的重新定义。

相关内容