setspace 和 quote:为什么引用前的内容间距乱了?

setspace 和 quote:为什么引用前的内容间距乱了?

我正在尝试将主文档设置为一个半行距,并将缩进的引文设置为单倍行距。

我注意到一个好的方法被建议在如何设置 blockquote 的样式?但是,当我尝试将其应用于段落内的缩进引用时,单倍行距会应用于前面的文本:

截屏

之前应用虚假单个空格的机制是什么以及如何纠正它?

\lipsum[66]一种解决方法是在第一个和之间换行\begin{quote},但这在语义上是“不正确的”,因为它们应该属于同一个段落。

梅威瑟:

\documentclass[UKenglish]{article}

\usepackage{babel}
\usepackage[autostyle]{csquotes}
\usepackage{lipsum}
\usepackage{setspace}
\usepackage{etoolbox}

\onehalfspacing

\AtBeginEnvironment{quote}{\singlespacing}

\begin{document}

\lipsum[66]
\begin{quote}
  \lipsum[75]
\end{quote}
\lipsum[66]

\end{document}

答案1

\onehalfspacingTeX 和 LaTeX 中的某些设置适用于整个段落,使用和设置的行距\singlespacing就是其中一种设置。通常段落排版时,设置在段落末尾生效。

内部quote实现为\list,它在某些时候调用\par来为列表开始一个新段落。

补丁完成后,问题中的代码实际上会执行

\lipsum[66]
{\singlespace\list...\endlist}

其中\list包括一个\par调用。这意味着 LaTeX 会看到类似以下情况

\lipsum[66]{\singlespace\par}

此处段落结束,整段内容排版,行距设置处于活动状态在那时候。因此整个段落都采用单倍行距排版。

显然这不是我们想要的。一个解决方案是在进入之前手动结束段落quote(这是您在问题中已经发现的)。如果这在语义上感觉不对,您可以通过将其包含在补丁中来强制\parquote无论如何都会执行)稍微早一点

\documentclass[UKenglish]{article}

\usepackage{babel}
\usepackage[autostyle]{csquotes}
\usepackage{lipsum}
\usepackage{setspace}

\onehalfspacing

\AtBeginEnvironment{quote}{\par\singlespacing}

\begin{document}

\lipsum[66]
\begin{quote}
  \lipsum[75]
\end{quote}
\lipsum[66]

\lipsum[66]

\end{document}

单倍行距的引文和半倍行距的周围文本。

由于您正在加载,csquotes我建议您实际使用它的环境之一而不是标准环境quote。然后我们可以按照建议csquotes.cfg和所示修改其行为我的答案如何更改 csquotes 引文的字体大小?

对于语义上更好的解决方案,我们必须使用\singlespacingas 设置的内部实现\setstretch {\setspace@singlespace}来避免引入的空间校正\singlespacing

\documentclass[UKenglish]{article}

\usepackage{babel}
\usepackage[autostyle]{csquotes}
\usepackage{setspace}

\onehalfspacing

\makeatletter
\newenvironment{singlequote}
  {\quote\setstretch{\setspace@singlespace}}
  {\endquote}
\makeatother

\SetBlockEnvironment{singlequote}

\usepackage{lipsum}

\begin{document}
\lipsum[66]
\begin{displayquote}
  \lipsum[75]
\end{displayquote}
\lipsum[66]
\end{document}

答案2

尝试在不对间距进行任何更改的情况下使用代码,输出中的引号前后各有一个空行。因此,它看起来介于两者之间\lipsum[66]

如果你希望输出中不显示引号前的额外空格,那么可以在引号前添加一些负空格。例如:

% spacingpob.tex SE 569716
\documentclass[UKenglish]{article}

\usepackage{babel}
\usepackage[autostyle]{csquotes}
\usepackage{lipsum}
\usepackage{setspace}
\usepackage{etoolbox}

%\onehalfspacing

%\AtBeginEnvironment{quote}{\singlespacing}
%\AtBeginEnvironment{quote}{\onehalfspacing\singlespacing}

\begin{document}

\lipsum[66]
\vspace{-0.6\baselineskip}
\begin{quote}
  \lipsum[75]
\end{quote}
\lipsum[66]

\end{document}

我认为你可能需要区分思考语义LaTeX 中的数据与输出中的数据相比。

相关内容