有什么方法可以让 storebox 包与 tex4ebook 一起工作吗?
基于 storebox 文档的 MWE 是:
\documentclass{article}
\usepackage{storebox}
\newstorebox{\mybox}
\begin{document}
\storebox{\mybox}{Contents of box}
\usestorebox{\mybox}
\usestorebox{\mybox}
\end{document}
根据文档,这只会在 pdf 文件中存储一个盒子副本以减小文件大小。它还说该包仅适用于 pdflatex 或 lualatex。
我想将它与 tex4ebook 一起使用,并带有重复的图像,就像讨论过的修改后的棋盘命令一样这里.我想定义一个带有
\storebox{\mybox}{%
\begin{center}
\mychessboard
\end{center}}
}
并根据需要在文件中使用 \usestorebox{\mybox}。
如果稍后使用相同的棋盘,则想法是使用以前生成的图像,而不是创建新的图像。
谢谢。
更新:
我刚刚发现@Michal.h21 的解决方案不适用于 mobi 输出。
命令的输出
tex4ebook -r 133 -f mobi mwename.tex
是
Amazon kindlegen(Windows) V2.9 build 1029-0897292
A command line e-book compiler
Copyright Amazon.com and its Affiliates 2014
*************************************************************
Error(xmlmake):E27012: Item or process id already used: mwename0x_png
Pack mobi 2
有什么方法可以避免这个错误吗?
如果我生成 epub,Calibre 会将文件转换为 mobi,不会出现任何错误。但是,我注意到 Calibre 转换其他文件时并不总是正确的,因此如果可能的话,我希望避免这种情况。
谢谢你的帮助。
更新 2:
@Michal.h21
使用新的 tex4book 文件仍然会导致错误。如果我生成 epub,它可以正常运行,但当我尝试使用 Calibre 查看它时会挂起:
如果我生成 mobi,我会收到一个错误:
Error(core):E1005: Could not access file.
in file: C:\Users\User\AppData\Local\Temp\mbp_7E1_1_1D_E_C_1F_3E7_3574_2508_1\OEBPS\mwename.html
您遇到了这些错误吗?
谢谢。
更正:
我注意到 epub 运行最后给出了一个整洁的错误:
HTML Tidy for Windows released on 25 March 2009
Error: Can't open "mwename-epub/OEBPS/mwename.ncx"
这可能是问题所在吗?
mwename.ncx 存在于工作目录中:
<?xml version="1.0"?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN"
"http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1"> <head>
<meta name="dtb:uid" content="http://example.com/mwename"/>
<meta name="dtb:depth" content="3"/>
<meta name="dtb:totalPageCount" content="0"/>
<meta name="dtb:maxPageNumber" content="0"/>
</head>
<docTitle>
<text>Unnamed</text>
</docTitle>
<navMap>
<navPoint id="mainentry" playOrder="1"> <navLabel><text>Document</text></navLabel> <content src="mwename.html" /> </navPoint></navMap>
</ncx>
它不在OEBPS目录中。OEBPS目录中只有一个文件content.opf。
答案1
似乎每次使用都会\savebox
复制数据,但使用相同的输出图像名称。我们可以利用这一事实,在make4ht
构建文件中创建自定义图像转换函数,该函数将检查文件名并仅转换一次。
将以下文件另存为mwename.mk4
:
local used_images = {}
Make:image("png$", function(par)
local output = par.output
if not used_images[output] then
local command = "dvipng -bg Transparent -T tight -D ${resolution} -o ${output} -pp ${page} ${source}" % par
print(command)
used_images[output] = true
os.execute(command)
end
return true
end)
构建文件是一个 Lua 脚本,函数Make:image("png$",...)
配置图像的创建png
。它会检查文件名是否已被使用,如果没有,它才会创建图像。
当我们修改MWE来创建图片时:
\documentclass{article}
\usepackage{storebox}
\newstorebox{\mybox}
\begin{document}
\storebox{\mybox}{\Picture+{}Contents of box\EndPicture}
\usestorebox{\mybox}
\usestorebox{\mybox}
\end{document}
结果如下:
您可以使用-r
命令行选项来更改图片的分辨率:
tex4ebook -r 133 mwename.tex