Como obter margens em quebras de página inseridas dinamicamente em uma figura de um ebook tex4ht

Aug 17 2020

Resumo

Estou criando um ebook usando LaTeX e tex4ht. Tenho determinado texto que quero tratar como uma figura. Às vezes, esse texto abrange várias páginas. Quando isso acontece, as quebras de página inseridas dinamicamente no visualizador do e-book quebram o texto sem levar em consideração as margens (pelo menos, não consigo descobrir como controlá-lo). Em outras palavras, a quebra de página pode acontecer bem no centro vertical de uma linha de texto.

Aqui está um exemplo de tal linha do meu MWE abaixo.

Eu tentei adicionar diferentes margens e preenchimentos no CSS, mas nada funcionou. Como posso evitar que isso aconteça?

Estou usando o ebook-convert do Calibre para criar o ebook, mas experimentei vários programas de criação, vários formatos e vários visualizadores de ebook - tudo o que tentei se comporta de maneira semelhante em relação a esse problema.

MWE

mwe.tex

\documentclass[ebook]{book}

%% Do-nothing environments that provide CSS hooks
\newenvironment{wrap-html-outer}{}{}
\newenvironment{wrap-html-inner}{}{}

\newenvironment{textfigure}{%
  \begin{figure}%
  \begin{wrap-html-outer}%
  \begin{wrap-html-inner}%
}
{
  \end{wrap-html-inner}%
  \end{wrap-html-outer}%
  \end{figure}%
}

\usepackage{lipsum}

\begin{document}

Some text before the figure.

\begin{textfigure}%
\lipsum
\end{textfigure}

Some text after the figure.

\end{document}

tex4ht.cfg

\RequirePackage{include4ht}
\Preamble{xhtml}

\AddCss{custom.css}
\ConfigureEnv{wrap-html-outer}{\HCode{<div class="wrap-html-outer">}}{\HCode{</div>}}{}{}
\ConfigureEnv{wrap-html-inner}{\HCode{<div class="wrap-html-inner">}}{\HCode{</div>}}{}{}

\begin{document}
\EndPreamble

CSS customizado

p.noindent {
    text-indent: 0;
}

div.figure {
  margin-top: 1em;
  margin-bottom: 1em;
}

div.wrap-html-outer {
    text-align: center;
    padding: 1em 2em;
}

div.wrap-html-inner {
    display: inline-block;
    text-align: left;
}

Comandos

% htxelatex mwe "tex4ht.cfg,xhtml,charset=utf-8" " -cunihtf -utf8" ""
% /Applications/calibre.app/Contents/MacOS/ebook-convert mwe.html mwe.epub --extra-css custom.css

Respostas

1 michal.h21 Aug 17 2020 at 15:53

Infelizmente, o Calibre está quebrado no meu sistema devido a alguns conflitos na biblioteca do Python. Mas posso confirmar esse problema no Foliate, que é o visualizador de e-books do Gnome.

Um problema que posso ver é que todo o conteúdo do seu flutuador de texto está incluído no <p>elemento, que é um HTML inválido. Em geral, você precisa fechar parágrafos antes de inserir elementos de nível de bloco, como <div>. Isso pode ser feito usando os seguintes comandos:

\ifvmode\IgnorePar\fi\EndP

Isso precisa ser feito antes de cada um \HCode{<div ...>}. Você pode exigir um novo parágrafo usando \par. O arquivo de configuração atualizado pode ter esta aparência:

\RequirePackage{include4ht}
\Preamble{xhtml}

\AddCss{custom.css}
\def\closecurrentpar{\ifvmode\IgnorePar\fi\EndP}
\ConfigureEnv{wrap-html-outer}{\closecurrentpar\HCode{<div class="wrap-html-outer">}\par}{\closecurrentpar\HCode{</div>}}{}{}
\ConfigureEnv{wrap-html-inner}{\closecurrentpar\HCode{<div class="wrap-html-inner">}\par}\closecurrentpar{\HCode{</div>}}{}{}

\begin{document}
\EndPreamble

Isso não resolve o problema real, no entanto. Parece que é causado por esta declaração no seu CSS:

div.wrap-html-inner {
    display: inline-block;
    text-align: left;
}

Quando você remove display: inline-block;, as linhas são exibidas corretamente. Qual é o objetivo desta declaração?