
Я пытаюсь задать макет для книги из двух колонок с определенным макетом страницы (указанным в geometry
пакете) и стекст в обеих колонках выровнен относительно друг друга. Для этого я уже отрегулировал длину пробелов между абзацами и до и после плавающих элементов:
%%% adjust all spacings to \baselineskip to align text paragraphs and floats
\usepackage{setspace}
\setstretch{1.5}
\setlength{\parskip}{\baselineskip}
\usepackage{etoolbox}
\BeforeBeginEnvironment{figure}{\kern \baselineskip}
и это отлично работает для стандартной разметки страницы*:
Однако как только я изменяю макет страницы, в частности основной текст, с помощью geometry
пакета, он перестает работать.
Может ли кто-нибудь объяснить мне, почему это происходит и как это исправить?
Вот МВЭ.
\documentclass[twocolumn]{book}
% page layout settings with geometry
\usepackage[papersize={240mm,300mm}
,hmargin={25mm}
,top={20mm}
,columnsep={10mm}
,body={190mm, 220mm} % <- when textbody is changed, fig/float placement changes!
]{geometry} %,
\usepackage{lipsum} % generates filler dummy text
\usepackage[demo]{graphicx} % demo option replace images with black rectangles for testing purposes
\usepackage{caption}
% adjust all spacings to \baselineskip to align text paragraphs and floats
\usepackage{setspace}
\setstretch{1.5}
\setlength{\parskip}{\baselineskip}
\usepackage{etoolbox}
\BeforeBeginEnvironment{figure}{\kern \baselineskip}
\begin{document}
\lipsum[4]
\begin{figure}[tb]
\centering
\includegraphics[width=0.8\columnwidth]{castle}
\caption{This is a caption This is a caption This is a caption This is a cThis is a captionThis is a captionThis is a captionThis is a captionaption This is a caption.}
\end{figure}
\lipsum
\end{document}
решение1
В вашем примере нет ничего, что могло бы принудительно выравнивать строки текста по вашей сетке, поэтому, хотя в одном случае строки могли показаться близко выровненными, это просто удача.
Если вы хотите выровнять текст по сетке, товсевертикальный материал должен быть кратен \baselineskip
. Вы задали длины, но рисунок выглядит как произвольная высота, изображение имеет ту высоту, которую оно имеет при масштабировании ширины, а заголовок, похоже, имеет другой размер шрифта, поэтому рисунок не будет кратен основному тексту \baselineskip
. Поэтому текст после рисунка будет вне сетки, и выравнивание по следующему столбцу будет потеряно.
Одним из способов принудительно задать размер фигуры было бы использование minipage
с необязательным аргументом высоты, кратным \baselineskip
, и помещение \includegraphics
и \caption
внутрь этого аргумента.
Существуют пакеты, призванные помочь с компоновкой сетки, которые, вероятно, автоматизируют некоторые необходимые измерения.