tex4ht 전자 책의 그림 내에서 동적으로 삽입 된 페이지 나누기에 여백을 얻는 방법
요약
LaTeX와 tex4ht를 사용하여 전자 책을 만들고 있습니다. 그림으로 취급하고 싶은 특정 텍스트가 있습니다. 때때로이 텍스트는 여러 페이지에 걸쳐 있습니다. 이 경우 ebook 뷰어에서 동적으로 삽입 된 페이지 나누기가 여백에 관계없이 텍스트를 나눕니다 (적어도 제어 방법을 알 수 없습니다). 즉, 페이지 나누기는 텍스트 줄의 세로 중앙에서 바로 발생할 수 있습니다.
다음은 내 MWE의 이러한 라인의 예입니다.
CSS에 다른 여백과 패딩을 추가하려고 시도했지만 아무것도 작동하지 않았습니다. 이런 일이 발생하지 않도록하려면 어떻게해야합니까?
저는 Calibre의 ebook-convert를 사용하여 전자 책을 만들고 있지만 여러 제작 프로그램, 여러 형식 및 여러 전자 책 뷰어를 실험했습니다. 제가 시도한 모든 것이이 문제와 관련하여 유사하게 작동합니다.
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;
}
명령어
% 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
답변
불행히도 일부 Python 라이브러리 충돌로 인해 Calibre가 시스템에서 손상되었습니다. 하지만이 문제는 Gnome의 Ebook 뷰어 인 Foliate에서 확인할 수 있습니다.
내가 볼 수있는 한 가지 문제는 텍스트 플로트의 전체 내용 <p>
이 잘못된 HTML 요소에 포함되어 있다는 것입니다. 일반적으로와 같은 블록 수준 요소를 삽입하기 전에 단락을 닫아야 <div>
합니다. 다음 명령을 사용하여 수행 할 수 있습니다.
\ifvmode\IgnorePar\fi\EndP
이 작업은 각 \HCode{<div ...>}
. 그런 다음을 사용하여 새 단락을 요구할 수 있습니다 \par
. 업데이트 된 구성 파일은 다음과 같습니다.
\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
그래도 실제 문제는 해결되지 않습니다. CSS의 다음 선언으로 인해 발생한 것 같습니다.
div.wrap-html-inner {
display: inline-block;
text-align: left;
}
를 제거 display: inline-block;
하면 선이 올바르게 표시됩니다. 이 선언의 목적은 무엇입니까?