考虑以下 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 中。默认情况下,dvips
和ghostscript
用于图像转换。它不是很优雅,dvipng
可以提供更好的结果(具有抗锯齿功能),但它似乎不支持pstricks
。其他可能的解决方案是使用dvisvgm
,这对我来说似乎是最好的,因为矢量图像比位图更适合绘图。
我为 创建一个构建文件make4ht
,其中包含两个可能的图像转换选项:dvisvgm
forsvg
和dvips
+ gs
for 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
或。第二个参数可能是字符串模板,然后将被执行,或函数,您可以直接使用函数运行命令。这用于转换。我包含此版本主要用于教育目的,我会使用png
os.execute
png
svg
由于默认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.