pstricks 和 htlatex/tex4ht 的问题

pstricks 和 htlatex/tex4ht 的问题

考虑以下 MWE:

\documentclass{article}
\usepackage{pst-all}

\begin{document}
  \begin{pspicture}(0,-3)(12,5)
      \psline[linewidth=2pt]{->}(1.5,0)(0,0)
  \end{pspicture}
\end{document}

latex用(不是用)可以很好地编译pdflatex,但是用它运行时htlatex会导致 ghostscript 错误:

System call: dvips -E -q -Ppdf -f q.idv -pp 2 > zzq.ps
System return: 0
System call: gs -sDEVICE=pngalpha -sOutputFile=q0x.png -r110x110 -dEPSCrop -dBackgroundColor=16#ffffff -dTextAlphaBits=2 -dGraphicsAlphaBits=2 -q -dbatch -dNOPAUSE zzq.ps -c quit
Error: /configurationerror in --setpagedevice--
Additional information: [/PageSize [0 0]]
Operand stack:
   --nostringval--   (%%BoundingBox: 72 72 72 72)   --dict:1/2(ro)(G)--   --nostringval--   --nostringval--   (%%BoundingBox: 72 72 72 72)   1   72   72   false   --dict:1/1(L)--
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1951   1   3   %oparray_pop   1950   1   3   %oparray_pop   --nostringval--   1934   1   3   %oparray_pop   1820   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   %ztokenexec_continue   (scanner state)   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   1913   10   3   %oparray_pop   --nostringval--   --nostringval--   --dict:1/10(L)--   --nostringval--   15   %dict_continue
Dictionary stack:
   --dict:1190/1684(ro)(G)--   --dict:0/20(G)--   --dict:82/200(L)--
Current allocation mode is local
Last OS error: Invalid argument
Current file position is 169
GPL Ghostscript 9.16: Unrecoverable error, exit code 1
--- Warning --- System return: 256
Entering q.css
Entering q.tmp

dvips此代码以前运行良好。从其他示例中,我怀疑问题与无法确定图像的边界框有关(与无法确定图形的大小——尽管这里给出的解决方案(即为每个图像使用单独的文件)对我来说不是一个可行的解决方案),但我一直无法找出问题所在。

有人有什么想法吗?

答案1

我尝试了一些Pstricks示例,看来这个错误只是有时发生。

您可以使用以下方式轻松修改图像转换过程制作4小时,包含在 TL 2015 中。默认情况下,dvipsghostscript用于图像转换。它不是很优雅,dvipng可以提供更好的结果(具有抗锯齿功能),但它似乎不支持pstricks。其他可能的解决方案是使用dvisvgm,这对我来说似乎是最好的,因为矢量图像比位图更适合绘图。

我为 创建一个构建文件make4ht,其中包含两个可能的图像转换选项:dvisvgmforsvgdvips+ gsfor png。第二个选项使用与默认选项完全相同的选项tex4ht。它不适用于您的示例文件,但可能适用于其他图像。

该文件名为hello.mk4

if mode == "draft" then
  Make:htlatex{}
else
  Make:htlatex{}
  Make:htlatex{}
  Make:htlatex{}
end

Make:image("svg$",
  "dvisvgm -n -o ${output}  -p ${page} ${source}")

Make:image("png$",function(opt)
  local dvips = "dvips -E -q -Ppdf -f  -pp ${page} ${source} -o zz${input}.ps" % opt
  local gs = "gs -sDEVICE=pngalpha -sOutputFile=${output} -r110x110 -dEPSCrop -dBackgroundColor=16#ffffff -dTextAlphaBits=2 -dGraphicsAlphaBits=2 -q -dbatch -dNOPAUSE zz${input}.ps -c quit" % opt
  print(dvips)
  os.execute(dvips)
  print(gs)
  os.execute(gs)
end)

它是一个 Lua 脚本,前几行驱动 LaTeX 运行次数(mode变量是用-m选项设置的make4ht,因此make4ht -m draft filename只运行一次 LaTeX,与相比,它确实节省了时间htlatex

更有趣的是Make:image调用,第一个参数是文件名模式,它是 Lua 正则表达式,因此它匹配文件名末尾的svg或。第二个参数可能是字符串模板,然后将被执行,或函数,您可以直接使用函数运行命令。这用于转​​换。我包含此版本主要用于教育目的,我会使用pngos.executepngsvg

由于默认png生成图片tex4ht,因此还需要将输出配置为svg。可以使用 hello.cfg 来启用它\Configure{Picture}{.svg} in the custom config file (

\Preamble{xhtml}
\ConfigureEnv{psmatrix}{\Picture*{}}{\EndPicture}{}{}
\Configure{Picture}{.svg}
\begin{document}
\EndPreamble

使用以下方法编译文件

 make4ht -m draft -c hello.cfg -e hello.mk4 filename

结果:

在此处输入图片描述

png以及一些更有趣的例子来说明默认和svg转换之间的区别。

png版本:

在此处输入图片描述

以及svg

在此处输入图片描述

是的,png版本确实被截断了,我不知道这是否是由于错误的选项dvips或`gs.

相关内容