我有一大组eps
图像,需要将它们放入OpenOffice
( odt
) 文档中。我编写了一个简单的脚本来创建一个tex
包含这些eps
图像的文件,现在我尝试将其转换为odt
以下格式:
mk4ht oolatex eps-images.tex
问题是所有图像都转换为png
格式,从而变成(丑陋的)位图而不是(漂亮的)矢量图像。
阅读的手册页mk4ht
,我看到有一个可以跳过图像转换的选项:
-p Do not convert pictures
但此选项不直接适用于,mk4ht
而必须传递给其子脚本之一:t4ht
。
查看转换过程ps afxu
(在Linux下),嵌套命令的顺序为:
\_ /usr/bin/perl /usr/bin/mk4ht oolatex eps-images.tex
\_ sh -c /usr/share/tex4ht/htlatex eps-images.tex "xhtml,ooffice" "ooffice/! -cmozhtf" "-cooxtpipes -coo"
\_ /bin/sh /usr/share/tex4ht/htlatex eps-images.tex xhtml,ooffice ooffice/! -cmozhtf -cooxtpipes -coo
\_ t4ht -f/eps-images.tex -cooxtpipes -coo
\_ sh -c dvipng -T tight -x 1400 -D 72 -bg Transparent -pp 40:40 eps-images.idv -o eps-images19x.png
\_ dvipng -T tight -x 1400 -D 72 -bg Transparent -pp 40:40 eps-images.idv -o eps-images19x.png
所以问题是:我怎样才能获得-p
那里的选择t4ht
?
编辑1:感谢CV拉达克里希南为了它的答案!我们越来越接近目标了,但仍然不起作用。
如果我运行以下命令:
mk4ht oolatex eps-images ' ' ' ' ' -p'
从头开始,仅使用tex
主文件夹中的文件,最后两个脚本的输出是:
----------------------------
tex4ht.c (2009-01-31-07:33 kpathsea)
tex4ht -f/eps-images
-i/usr/share/texmf/tex4ht/ht-fonts/
ooffice/!
-cmozhtf
--- warning --- Can't find/open file `ooffice/!.dvi'
--- error --- Can't find/open file `ooffice/!.dvi'
----------------------------
t4ht.c (2009-01-31-07:34 kpathsea)
t4ht -f/eps-images
-p
-cooxtpipes
-coo
(/usr/share/texmf/tex4ht/tex4ht.env)
--- warning --- Can't find/open file `eps-images.lg'
并且没有odt
创建任何文件。因此,-p
选项实际上到达了t4ht
命令,但中间仍然缺少某些内容,脚本无法完成。
相反,如果我第一次运行:
mk4ht oolatex eps-images
从而创建所有png
图像,然后运行:
mk4ht oolatex eps-images ' ' ' ' ' -p'
所有png
图像都嵌入到最终odt
文件中(但已损坏)。因此,似乎中间有人仍在使用/需要这些png
图像。
EDIT2:发现另一个小提示这里。
Conditional bitmap conversion for imported graphic files
Q. How to avoid the conversion of eps files to PNG’s, included through the \includegraphics{...} command’, each time the source file is run across tex4ht.
Compile your source with the command line ‘ htlatex filename "html,info" ’, and check the log file for the information provided there. In particular, the ‘\Configure{graphics*} {wmf} ...’ example may be adapted for dealing with eps files, where a conditional conversion is requested within the ‘\Needs{"..."}’ command (possibly indirectly through a call to a script for doing he job).
有人可以改进这个解决方案吗?
答案1
语法mk4ht
如下:
mk4ht command file option1 option2 option3
command
可以是htlatex
或mzlatex
或oolatex
由提供的任何一个脚本tex4ht
。
option1
被传递给tex4ht.sty
(如,,html
... )xhtml
mathml
option2
被传递给输出的后处理器tex4ht.env
二进制。tex4ht
*.dvi
option3
是那些传递给t4ht
二进制文件的内容,它会创建图像、css 并执行 shell 特定的内容。
因此你的命令将是:
mk4ht oolatex eps-images ' ' ' ' ' -p'
请注意前面的空间-p
很重要。
答案2
我对答案有所改进——但可能仍然不是完美的解决方案。
我使用了 krlmlr 建议的配置方法这里并且它起作用了。:
(这可能和你的“提示”所暗示的是一样的)
我刚写了一个配置文件,名为 my.cfg:
\Preamble{xhtml}
\Configure{graphics*}
{eps}
{
\Picture[pict]{\csname Gin@base\endcsname.eps}
}
\begin{document}
\EndPreamble
然后我就跑了
mk4ht oolatex test "my" " " " -p"
我得到了一个嵌入了 .eps 图像的 test.odt 文件,无需转换。
唯一的问题是图像看起来很小,因为没有指定宽度和高度。我查看了 test.odt 中的 content.xml 文件(实际上只是一个 .zip 文件)。
在 content.xml 文件中,绘制图像的行如下所示:
<text:section
text:name="fig" text:style-name="Figure"><text:p text:style-name="bigskip"/>
<!--l. 9
--><text:p text:style-name="Text-body"> <draw:frame draw:name="prova.eps" text:anchor-type="as-char" draw:z-index="0"><draw:image xlink:href="Pictures/prova.eps" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/><!--draw:name="pict"
--></draw:frame>
</text:p>
这与你转换图像时得到的结果不同:
<text:section
text:name="fig" text:style-name="Figure"><text:p text:style-name="bigskip"/>
<!--l. 9
--><text:p text:style-name="Text-body"><draw:frame draw:name="test0x.png" text:anchor-type="as-char" draw:z-index="0" svg:width="411pt" svg:height="195pt"><draw:image xlink:href="Pictures/test0x.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/><!--draw:name=" "
--></draw:frame><!--tex4ht:graphics
name="test0x.png" src="prova.eps" svg:width="411.03561pt" svg:height="195.22935pt"
-->
</text:p>
另外,我注意到,当包含未转换的 eps 图像时,第一次打开文档时会出现长时间的暂停,并且缩放功能也会运行得非常慢。
所以将 .eps 图像嵌入 .odt 也许不是一个好主意。
我还注意到,当您手动创建 .odt 文件并插入 eps 图像时,缩放功能可以顺利运行 - 但如果您关闭文档并重新打开它,则开始时会加载很长时间,缩放功能也会卡顿。所以这可能是 OpenOffice 的问题,与我们通过 tex4ht 插入 eps 图像的方式无关。
无论如何,除了性能问题之外,仍有待解决的问题是:如何将 eps 图像以适当的尺寸(宽度/高度)转换为 .odt?
但是,主要问题已经得到回答:使用配置文件和 -p 选项。
附录(关于为什么 -p 对您不起作用):
请注意,我在 mk4ht 命令中使用了“ ”而不是“ ”。
使用“ ”实际上会给我一个错误(与您的不同)。
另外,我注意到您的输出 tex4ht -f/eps-images
为什么是 tex4ht eps-images 而不是 tex4ht eps-images ?