Alinhamento vertical de figura e texto em documento de duas colunas

Alinhamento vertical de figura e texto em documento de duas colunas

Estou tentando definir um layout para um livro de duas colunas com um layout de página específico (especificado no geometrypacote) e com otexto em ambas as colunas alinhadas entre si. Para isso já ajustei o comprimento dos espaços entre os parágrafos e antes e depois dos carros flutuantes:

%%% 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}

e funciona bem para o layout de página padrão*:

insira a descrição da imagem aqui

Porém, depois que altero o layout da página, especificamente o corpo do texto, com o geometrypacote ele para de funcionar.

insira a descrição da imagem aqui

Alguém pode me explicar por que isso acontece e como posso consertar?

Aqui está o MWE.

\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}

Responder1

Olhando para o seu exemplo, não há nada que force o alinhamento das linhas de texto à sua grade; portanto, embora em um caso as linhas possam ter aparecido estreitamente alinhadas, foi apenas sorte.

Se você deseja alinhar o texto a uma grade, entãotodoso material vertical colocado deve ser um múltiplo de \baselineskip. Você definiu os comprimentos, mas a figura parece ter uma altura arbitrária, a imagem tem a altura que tem quando sua largura é dimensionada e a legenda parece estar definida para um tamanho de fonte diferente, então a figura não será um múltiplo de o corpo principal \baselineskip. Portanto, o texto após a figura ficará fora da grade e o alinhamento com a coluna seguinte será perdido.

Uma maneira de forçar o tamanho da figura seria usar a minipagecom seu argumento opcional de altura definido como um múltiplo de \baselineskipe colocar \includegraphicse \captiondentro dele.

Existem pacotes que visam ajudar no layout da grade que provavelmente automatizam algumas das medições necessárias.

informação relacionada