使 \newunit 插入句间空格的正确方法是什么?

使 \newunit 插入句间空格的正确方法是什么?

我的大学要求我使用以下参考书目样式:

大学书目格式范例

.bbx我试图通过创建一个基于的自定义文件来实现这一点standard.bbx。我面临的问题是,当我\newunit在内部使用时\DeclareBibliographyDriver{book},biblatex 会在年份和标题之间插入单词间空格:

错误结果

我还想在作者和日期之间使用句子间空格。不过,我知道 TeX 总是在逗号后放置中间单词空格,而我想要的不是标准行为。

以下是产生太小空间的代码:

\DeclareBibliographyDriver{book}{%
  \printnames{author}%
  \setunit{\addcomma\addspace}%
  \printfield{year}%
  \newunit\newblock%
  \printfield{title}%
  \newunit\newblock%
  \printlist{location}%
  \setunit{\addcolon\addspace}%
  \printlist{publisher}%
  \finentry}

我将其替换为以下内容,达到了接近我想要的效果:

\newbibmacro*{author+year+title}{%
  \printnames{author}%
  \addcomma\enspace%
  \printfield{year}%
  \adddot\enspace%
  \printfield{title}%
  \newunit}

\DeclareBibliographyDriver{book}{%
  \usebibmacro{author+year+title}%
  \newblock%
  \printlist{location}%
  \setunit{\addcolon\addspace}%
  \printlist{publisher}%
  \finentry}

结果接近我想要达到的

问题是,biblatex 文档不鼓励手动添加空格。此外,使用\enspace似乎也不是个好主意。如果我没记错的话,这将阻止 TeX 在对齐文本时调整空格的宽度。

为了达到我想要的效果,最佳做法是什么?

答案1

对我来说,屏幕截图中的大空格看起来像是排版错误(错误的“对齐”),而不是有意识地选择在逗号后使用更多空格。我绝对不会尝试在 TeX 中重新创建此输出。

无论如何,您当然可以更改 产生的空格\newunit\newunit只是发送\newunitpunct到标点缓冲区,因此您可以重新定义\newunitpunct。 它的默认定义biblatex.def

\newcommand*{\newunitpunct}{\addperiod\space}

你可以做到这一点

\renewcommand*{\newunitpunct}{\addperiod\quad}

或者类似的东西,如果你需要更多的空间。

值得注意的是,\newunit/\newunitpunct被广泛使用,重新定义它可能会改变很多事情。

biblatex可以选择block控制参考书目块的排版(由 引入\newblock)。使用block=space,您可以在块之间引入一些额外的空间。根据您的参考书目样式及其使用方式\newblock,可能会在合理的位置提供一些额外的空间。

为了实现更精细的控制,还需要做更多的工作。虽然大多数标点符号biblatex都是通过\newunit一些(经常修改的)标点符号插入的,但它们有自己的命令,可以轻松更改这些命令而不会影响其他标点符号。

既然你似乎已经完全重新定义了书目驱动程序,你当然可以选择类似

\setunit{\addcomma\quad}%

代替\setunit{\addcomma\addspace}%

只要记住,在驱动程序和 bibmacros 中使用“裸” \add.../命令是不好的。/和朋友应该只出现在或 中。\space\add...\space\setunit\DeclareFieldFormat

相关内容