Come ottenere margini su interruzioni di pagina inserite dinamicamente all'interno di una figura di un ebook tex4ht
Riepilogo
Sto creando un ebook usando LaTeX e tex4ht. Ho un certo testo che voglio trattare come una figura. A volte, questo testo si estende su più pagine. Quando ciò accade, le interruzioni di pagina inserite dinamicamente dal visualizzatore di ebook interrompono il testo senza tener conto dei margini (almeno, non riesco a capire come controllarlo). In altre parole, l'interruzione di pagina può avvenire proprio nel centro verticale di una riga di testo.
Ecco un esempio di tale linea dal mio MWE di seguito.

Ho provato ad aggiungere diversi margini e padding nel CSS, ma non ha funzionato. Come posso evitare che ciò accada?
Sto usando l'ebook-convert di Calibre per creare l'ebook, ma ho sperimentato più programmi di creazione, più formati e più visualizzatori di ebook: tutto ciò che ho provato si comporta in modo simile rispetto a questo 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 personalizzato
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;
}
Comandi
% 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
Risposte
Sfortunatamente, Calibre è rotto sul mio sistema a causa di alcuni conflitti di libreria Python. Ma posso confermare questo problema in Foliate, che è il visualizzatore di ebook per Gnome.
Un problema che posso vedere è che l'intero contenuto del tuo float di testo è racchiuso <p>
nell'elemento, che è HTML non valido. In generale, è necessario chiudere i paragrafi prima di inserire elementi a livello di blocco come <div>
. Può essere fatto usando i seguenti comandi:
\ifvmode\IgnorePar\fi\EndP
Questo deve essere fatto prima di ogni \HCode{<div ...>}
. È quindi possibile richiedere un nuovo paragrafo utilizzando \par
. Il file di configurazione aggiornato può avere il seguente aspetto:
\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
Questo però non risolve il vero problema. Sembra che sia causato da questa dichiarazione nel tuo CSS:
div.wrap-html-inner {
display: inline-block;
text-align: left;
}
Quando rimuovi display: inline-block;
, le righe vengono visualizzate correttamente. Qual è lo scopo di questa dichiarazione?