Вертикальное выравнивание рисунков и текста в документе с двумя колонками

Вертикальное выравнивание рисунков и текста в документе с двумя колонками

Я пытаюсь задать макет для книги из двух колонок с определенным макетом страницы (указанным в 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внутрь этого аргумента.

Существуют пакеты, призванные помочь с компоновкой сетки, которые, вероятно, автоматизируют некоторые необходимые измерения.

Связанный контент