避免使用 mk4ht oolatex 将 eps 转换为 png

避免使用 mk4ht oolatex 将 eps 转换为 png

我有一大组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可以是htlatexmzlatexoolatex由提供的任何一个脚本tex4ht

option1被传递给tex4ht.sty(如,,html... )xhtmlmathml

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>&#xD;
</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"  

-->&#xD;
</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 ?

相关内容