setspace 和 quote:為什麼引號前的內容間距會混亂?

setspace 和 quote:為什麼引號前的內容間距會混亂?

我試圖將我的主文件設定為一倍半間距,並為縮排引用設定單間距。

我注意到建議了一個好方法如何設定塊引用樣式?,但是當我嘗試將其應用於段落內的縮進引號時,單個空格將應用於前面的文本:

螢幕截圖

先前應用虛假單一空格的機制是什麼以及如何修正?

\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實作為 a \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 中的內容與輸出中的內容。

相關內容