
Я пытаюсь установить для основного документа полуторный интервал и одинарный интервал для цитат с отступом.
Я заметил, что хороший способ сделать это был предложен вКак оформить цитату?, однако когда я пытаюсь применить это к цитате с отступом внутри абзаца, к предшествующему тексту применяется одинарный интервал:
Каков механизм применения ложного одинарного пробела и как это исправить?
Обходным решением является создание переноса строки между первым \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
Некоторые настройки в TeX и LaTeX применяются ко всему абзацу, межстрочный интервал, заданный с помощью \onehalfspacing
и \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 по сравнению с выводом.