我的大学要求我使用以下参考书目样式:
.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