biblatex/multicol:参考书目标题后的垂直空格不正确

biblatex/multicol:参考书目标题后的垂直空格不正确

我正在尝试在环境中排版参考书目multicols,但将标题作为单列(使用multicols' 可选参数)。我注意到标题和实际参考书目之间的垂直空间比以单列模式排版的参考书目要大。仔细检查后发现,使用 时,标题后的“普通”文本间距似乎也更大一些multicols,但 biblatex/multicol 组合会产生更多的额外垂直空间。

multicol 文档第 2 页指出,\addvspace用于multicols环境前后的间距(长度为\multicolsep)。这似乎与“正常”标题后观察到的行为一致,因为默认值\multicolsep(12pt)大于标准类中各节后的垂直空间(2.3ex,即字体大小为 10pt 时约为 9.9pt)。我目前的解决方法是设置\multicolsep为 0pt,但这会对文本内multicols环境产生负面影响。所以我想知道参考书目标题后“顶部”额外垂直空间的原因是什么。

\documentclass{article}

\usepackage[english]{babel}
\usepackage{blindtext}

\usepackage{biblatex}
\defbibheading{none}{}% for biblatex v<1.5

\usepackage{multicol}

% My current workaround
% \setlength{\multicolsep}{0pt}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\section{First Section }

\blindtext

\begin{multicols}{2}[\section{Second Section}]
\blindtext
\end{multicols}

\printbibliography[title={First Bibliography}]

\begin{multicols}{2}[{\printbibheading[title={Second Bibliography}]}]
\printbibliography[heading=none]
\end{multicols}

\end{document}

答案1

除了遵循 henrique 的好建议之外,你还可以说

\begingroup\setlength{\multicolsep}{0pt}
\begin{multicols}{2}[{\printbibheading[title={Second Bibliography}]}]
\printbibliography[heading=none]
\end{multicols}\endgroup

或者,可能定义一个个人命令:

\newcommand\twocolprintbibliography[2][0pt]{%
  \begingroup\setlength{\multicolsep}{#1}%
  \begin{multicols}{2}[{\printbibheading[title={#2}]}]
  \printbibliography[heading=none]
  \end{multicols}\endgroup}

并将其称为

\twocolprintbibliography{Second Bibliography}
\twocolprintbibliography[3pt]{Second Bibliography}

这使得输入更加清晰。可选参数用于在需要时微调间距。

答案2

仔细查看我的最小示例,似乎在环境中排版的参考书目标题后的“不正确”垂直间距multicols等于\multicolsep和正常标题后的垂直间距之和。换句话说,\addvspace似乎像 一样工作\vspace

搜索comp.text.tex“\addvspace”得到了一系列消息LaTeX 中 \index 的间距问题从 1999 年开始,一些用户描述了 的普遍缺陷\addvspace。引用 James Kilfiger 的话:

[A] 当第二个 \addvspace 与第一个 \addvspace 之间存在“写入什么内容”时,第二个 \addvspace 无法“看到”第一个。

大卫·卡莱尔:

[V]ertical 模式通常不适合 \write 的 \specials \marks 或任何其他您不想影响间距的东西。

唐纳德·阿瑟诺:

在 LaTeX 中添加垂直空间的大多数内容(例如列表和章节标题)都是通过 \addvspace 贡献空间的(请参阅手册),但这并不一定会增加任何空间!(命名不当!)\addvspace{v} 的作用是有条件地增加现有空间,使其至少与 v 一样大。为此,它需要在“垂直列表”中寻找前一个空格(垂直跳过)。

在正常情况下, \section 命令会看到列表下方的空间,并将其增加到部分之前所需的空间,但是 \index 命令会将其他内容放在列表中,然后 \section 命令就看不到任何前面的空间,因此它会添加整个前部分空间以提供 after_list + before_section 的总空间。

\label、\addtocontents 和 \color 命令也存在相同的问题。

我的 MWE 中的参考书目使用标准的“参考书目”书目标题。其对该article类的定义如下:

\defbibheading{bibliography}[\refname]{%
  \section*{#1}%
  \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}%
}

也就是说,参考书目将被排版为未编号的部分,不会生成任何目录条目。但是,文档页眉和页脚将(与正常情况相反\section*)由\markboth-- 和命令是导致 发生故障的罪魁祸首\addvspace。从上面的代码片段中删除以 开头的代码行\markboth,然后将其插入我的 MWE,将导致所有参考书目标题的垂直间距正确(但会牺牲正确的页眉和页脚)。

显然,不更新页眉和页脚是一种糟糕的解决方法。编号部分将更新\section命令内的页眉和页脚,因此不会影响\addvspace。对于没有目录条目的未编号部分,我们可以利用“[] 参考文献的完整列表由\printbibliography将在一个组中处理”biblatex手册,第 4.11.9 节)。也就是说,我们可以重新定义“参考书目”书目标题,以便它 a) 本地设置计数器的值secnumdepthtocdepth设置为 -2 b) 使用无星号版本\section排版标题。必须将以下代码添加到我的 MWE 中以获得正确的垂直间距:

\defbibheading{bibliography}[\refname]{%
%   \section*{#1}% DELETED
%   \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}% DELETED
  \defcounter{secnumdepth}{-2}% NEW
  \defcounter{tocdepth}{-2}% NEW
  \section{#1}% NEW
}

相关内容