在用 LaTeX 写完一本书后,我了解到许多在线书籍都是以 ePub 格式出版的。然后我决定学习一点如何将.tex
(或.pdf
)转换为.epub
。这本书有方程式(包括align
)、图形(.png
、.eps
)、表格和TikZ
。我使用特克斯工作室担任编辑和MikTeX在视窗。
首先我尝试潘多克。我很快意识到.pdf
->.epub
似乎不是一条可行的路线。然后我集中精力.tex
-> (某条路线) -> .epub
。我没有找到任何路线或标志组合来潘多克好好工作。
我已经看到并测试过(至少尝试过)一些选项:
latexml
:使用 LaTeX 制作 Epub——对我来说这似乎仍然有点令人困惑;htlatex
:如何将 LaTeX 电子书转换为 ePUB (LaTeX 高级教程-22).html
—— 它运行良好,(TeXstudio 中的“用户命令”有奖励),但是如果文件存在某些问题,通过 Calibre 的 ePub 将无法工作。tex4ebook
:tex4ebook 包——取得了最好的成绩。
基本命令:tex4ebook %.tex
,其中%
是文件名(适用于 TeXstudio 中的快速用户命令),效果很好。
tex4ebook
适用于以下功能(比我尝试过的第一个选项好得多):
等式,包括其环境之外的数学运算符:“$...$”、“(...)”和“[...]”;
表格;
Hyperref/url——所有链接均有效;
TikZ 语法
\ifdefined\HCode \def\pgfsysdriver{pgfsys-dvisvgm4ht.def} \fi
源自tex4ebook:TikZ 的节点消失了吗? tex4ht 的替代 TikZ 驱动程序与.css
来自的文件FriendsOfEpub/Blitz;
- 到目前为止,一切都很好直到我尝试测试数字。
我可以插入.eps
数字,但我不知道如何插入其他类型,例如.jpg
和.png
。
如何通过 tex4ebook 将图形插入 ePub?
其中还包括:
graphics
和graphicx
有区别吗?- 我是否应该始终插入文件扩展名?因为
pdflatex
没有必要; - 有没有比 ePub 更可取的图形文件类型?
我尝试按照
使用某些选项进行编译.tex
没有帮助:
tex4ebook -l -t -c config_file.cfg %.tex
-l
:LuaTeX
只是向我显示了更清晰的消息;-t
:Tidy
,我不明白它的用法,以及如何从任何文件夹调用它;-c
:这一点令我非常感兴趣。
我找到了一些配置文件,但我无法确切地说出它们的作用。我不知道我是否缺少某些文件,例如某些示例中.css
的命令中的文件\Configure
;或者与 相关的某些内容make4ht
;或者问题是否源于 的使用LuaTeX
;或者 的使用Tidy
。
有时我会收到以下消息(每个图形在不同的坐标中各收到一条消息):
dvipng warning: at (31,156) unimplemented \special{em: graph any.jpg,72bp,72bp}
独立于是否使用.cfg
。我注意到,.png
创建了一个包含某些类型的对象(例如方程式、数学符号和.eps
图形)的文件,但.jpg
和.png
图形始终为空。我推测它可能与选项width
或如何理解有关tex4ebook
,但我搜索的示例没有给我任何提示。
下面是一个 MWE,其中包含我迄今为止尝试过的一些选项以及生成的 ePub。注意:“any”、“some”和“fine”是通用文件名。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{epstopdf}
% \usepackage{tex4ebook} % Doesn't seem to make any difference for png jpg
\begin{document}
1 -- includegraphics alone.
\includegraphics{any.jpg}
2 -- includegraphics alone, but with parameters, jpg.
\includegraphics[width=1\linewidth]{any.jpg}
3 -- includegraphics png must have the explicit extension to work ate the \texttt{tex4ht} and with width.
\includegraphics[width=1\linewidth]{some.png}
\includegraphics[width=0.5\linewidth]{some.png}
4 -- Inside figure environment
\begin{figure}[!htb]
\centering
\includegraphics[width=0.8\linewidth]{any.jpg}
\caption{Figure inside figure environment.}
\end{figure}
4.1 -- Inside figure environment
\begin{figure}[!htb]
\centering
\includegraphics[width=600pt]{any.jpg}
\caption{Figure inside figure environment width pt.}
\end{figure}
5 -- eps figure
\includegraphics[width=1\linewidth]{fine.eps}
5.1 -- eps figure
\begin{figure}[!htb]
\centering
\includegraphics[width=1\linewidth]{fine.eps}
\caption{Figure eps inside figure environment width.}
\end{figure}
\end{document}
答案1
看来 MikTeX 版本的 TeX4ht 不是最新的。发生这种情况是因为 TeX4ht 直接安装到 TeX Live,更新未安装在 CTAN 上,因此 MikTeX 维护者不会收到更新通知。我已经在 MikTeX 问题跟踪器上请求更新,希望这些问题能很快得到解决。
与此同时,我们可以使用本地配置修复您的问题。您已经设法修复了位图图片的问题,因此我们只需修复 EPS 支持即可。
尝试以下配置文件:
\Preamble{xhtml}
\begin{document}
\makeatletter
\Configure{graphics*}
{eps}
{\openin15=\csname Gin@base\endcsname\PictExt\relax%
\ifeof15%
\Needs{\csname a:EpsConvert\endcsname}%
\fi%
\closein15%
{\Configure{Needs}{File: \Gin@base\PictExt}\Needs{}}%
\Picture[\a:GraphicsAlt]{{\Gin@base\PictExt} \csname a:Gin-dim\endcsname
}}
\NewConfigure{EpsConvert}{1}
\Configure{EpsConvert}{"rungs -dSAFER -dBATCH -dNOPAUSE -dEPSCrop -r120 -sDEVICE=pngalpha -sOutputFile="\[email protected]" "\[email protected]" "}
\makeatother
\EndPreamble
它基本上是来自 TeX4ht 源的 EPS 支持代码。\Configure{graphics*}{eps}
包含用于包含 EPS 文件的代码。它检查所包含文件的位图版本是否存在,以防止在已经存在时进行不必要的转换。该\Needs
命令执行转换命令。在我们的例子中是 Ghostscript。它应该在 MikTeX 和 TeX Live 中都可用作rungs
命令。
结果如下: