setspace と quote: 引用前のコンテンツの間隔がおかしくなるのはなぜですか?

setspace と quote: 引用前のコンテンツの間隔がおかしくなるのはなぜですか?

メイン文書の行間を 1.5 に設定し、インデントされた引用文の行間を 1 に設定しようとしています。

私は、それを実行する良い方法が提案されていることに気づきましたblockquote のスタイルを設定するには?ただし、段落内のインデントされた引用にこれを適用しようとすると、前のテキストに単一のスペースが適用されます。

スクリーンショット

前に不必要な単一スペースを適用するメカニズムと、それを修正する方法は何ですか?

\lipsum[66]回避策としては、最初のとの間に改行を入れることです\begin{quote}が、これらは同じ段落に属しているはずなので、意味的には「正しくありません」。

MWE:

\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

TeX と LaTeX の一部の設定は段落全体に適用されます。 と で設定される行間隔は\onehalfspacingその\singlespacingような設定の 1 つです。通常、段落は段落の最後にアクティブになっている設定でタイプセットされます。

内部的にはquoteとして実装されており\list、ある時点で を呼び出して\parリストの新しい段落を開始します。

パッチを適用すると、質問のコードは基本的に実行されることになります。

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

\list呼び出しが含まれている場合\par、LaTeXは次の状況に似たものを認識することになります。

\lipsum[66]{\singlespace\par}

ここで段落は終了し、段落全体が行間設定を有効にしてタイプセットされます。その時点でしたがって、段落全体が 1 行間隔でタイプセットされます。

明らかにこれは私たちが望んでいることではありません。1つの解決策は、(これはすでに質問で見つけたものです)に入る前に手動で段落を終了することです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標準の ではなく、実際にその環境の 1 つを使用することをお勧めします。その後、 で提案されているように、また で示されているよう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

スペースを変更せずにコードを実行すると、出力内の引用符の前後に空白行が入ります。したがって、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 内のものと出力内のものの違い。

関連情報