我正在尝试将主文档设置为一个半行距,并将缩进的引文设置为单倍行距。
我注意到一个好的方法被建议在如何设置 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
\onehalfspacing
TeX 和 LaTeX 中的某些设置适用于整个段落,使用和设置的行距\singlespacing
就是其中一种设置。通常段落排版时,设置在段落末尾生效。
内部quote
实现为\list
,它在某些时候调用\par
来为列表开始一个新段落。
补丁完成后,问题中的代码实际上会执行
\lipsum[66]
{\singlespace\list...\endlist}
其中\list
包括一个\par
调用。这意味着 LaTeX 会看到类似以下情况
\lipsum[66]{\singlespace\par}
此处段落结束,整段内容排版,行距设置处于活动状态在那时候。因此整个段落都采用单倍行距排版。
显然这不是我们想要的。一个解决方案是在进入之前手动结束段落quote
(这是您在问题中已经发现的)。如果这在语义上感觉不对,您可以通过将其包含在补丁中来强制\par
(quote
无论如何都会执行)稍微早一点
\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 引文的字体大小?
对于语义上更好的解决方案,我们必须使用\singlespacing
as 设置的内部实现\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 中的数据与输出中的数据相比。