Comment obtenir des marges sur les sauts de page insérés dynamiquement dans une figure d'un ebook tex4ht
Sommaire
Je crée un ebook en utilisant LaTeX et tex4ht. J'ai un certain texte que je veux traiter comme une figure. Parfois, ce texte s'étend sur plusieurs pages. Lorsque cela se produit, les sauts de page insérés dynamiquement à partir de la visionneuse d'ebook divisent le texte sans tenir compte des marges (du moins, je ne sais pas comment le contrôler). En d'autres termes, le saut de page peut se produire au centre vertical d'une ligne de texte.
Voici un exemple d'une telle ligne de mon MWE ci-dessous.
J'ai essayé d'ajouter différentes marges et rembourrages dans le CSS, mais rien n'a fonctionné. Comment puis-je empêcher que cela se produise ?
J'utilise l'ebook-convert de Calibre pour créer l'ebook, mais j'ai expérimenté plusieurs programmes de création, plusieurs formats et plusieurs visionneuses d'ebook - tout ce que j'ai essayé se comporte de la même manière par rapport à ce problème.
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 personnalisé
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;
}
Commandes
% 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
Réponses
Malheureusement, Calibre est cassé sur mon système en raison de certains conflits de bibliothèque Python. Mais je peux confirmer ce problème dans Foliate, qui est une visionneuse d'ebook pour Gnome.
Un problème que je peux voir est que tout le contenu de votre flotteur de texte est enfermé dans l' <p>
élément, qui est un code HTML invalide. En général, vous devez fermer les paragraphes avant d'insérer des éléments de niveau bloc tels que <div>
. Cela peut être fait en utilisant les commandes suivantes :
\ifvmode\IgnorePar\fi\EndP
Cela doit être fait avant chaque \HCode{<div ...>}
. Vous pouvez ensuite exiger un nouveau paragraphe en utilisant \par
. Le fichier de configuration mis à jour peut ressembler à ceci :
\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
Cela ne résout pas le vrai problème cependant. Il semble que cela soit causé par cette déclaration dans votre CSS :
div.wrap-html-inner {
display: inline-block;
text-align: left;
}
Lorsque vous supprimez display: inline-block;
, les lignes s'affichent correctement. Quel est le but de cette déclaration ?