Bir tex4ht e-kitap şekline dinamik olarak eklenen sayfa sonlarında kenar boşlukları nasıl elde edilir

Aug 17 2020

Özet

LaTeX ve tex4ht kullanarak bir e-kitap oluşturuyorum. Figür olarak ele almak istediğim belirli bir metin var. Bazen bu metin birden çok sayfaya yayılır. Bu olduğunda, e-kitap görüntüleyiciden dinamik olarak eklenen sayfa sonları, herhangi bir kenar boşluğuna bakılmaksızın metni böler (en azından, onu nasıl kontrol edeceğimi çözemiyorum). Başka bir deyişle, sayfa sonu, bir metin satırının dikey merkezinde gerçekleşebilir.

İşte MWE'mden böyle bir hat örneği.

CSS'ye farklı kenar boşlukları ve dolgu eklemeyi denedim, ancak hiçbir şey işe yaramadı. Bunun olmasını nasıl engelleyebilirim?

E-kitabı oluşturmak için Calibre'nin e-kitap dönüştürmesini kullanıyorum, ancak birden çok oluşturma programı, birden çok biçim ve birden çok e-kitap görüntüleyici denedim - denediğim her şey bu soruna göre benzer şekilde davranıyor.

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

custom.css

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

Komutlar

% 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

Yanıtlar

1 michal.h21 Aug 17 2020 at 15:53

Ne yazık ki, bazı Python kütüphanesi çatışmaları nedeniyle sistemimde Calibre bozuldu. Ancak bu sorunu Gnome için Ebook görüntüleyici olan Foliate'te doğrulayabilirim.

Görebildiğim bir sorun, yüzen metin içeriğinizin tüm içeriğinin <p>geçersiz HTML olan öğenin içine alınmasıdır . Genel olarak, gibi blok düzeyi öğeleri eklemeden önce paragrafları kapatmanız gerekir <div>. Aşağıdaki komutlar kullanılarak yapılabilir:

\ifvmode\IgnorePar\fi\EndP

Bunun her birinden önce yapılması gerekiyor \HCode{<div ...>}. Daha sonra kullanarak yeni paragraf isteyebilirsiniz \par. Güncellenen yapılandırma dosyası şu şekilde görünebilir:

\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

Bu, gerçek sorunu çözmez. Görünüşe göre CSS'nizdeki şu beyandan kaynaklanıyor:

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

Çıkardığınızda display: inline-block;, çizgiler doğru şekilde görüntülenir. Bu bildirimin amacı nedir?