
Estou tentando definir um layout para um livro de duas colunas com um layout de página específico (especificado no geometry
pacote) 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*:
Porém, depois que altero o layout da página, especificamente o corpo do texto, com o geometry
pacote ele para de funcionar.
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 minipage
com seu argumento opcional de altura definido como um múltiplo de \baselineskip
e colocar \includegraphics
e \caption
dentro dele.
Existem pacotes que visam ajudar no layout da grade que provavelmente automatizam algumas das medições necessárias.