我创建了一个批处理文件,animator.bat
其中包含两个参数(一个没有扩展名的 TeX 输入文件名和页数)。
rem animator.bat
rem %1 TeX filename without extension
rem %2 The number of pages
latex "%~1"
latex "%~1"
dvips "%~1"
gswin64c -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile="%~1-%%d.ps" "%~1.ps"
latex --jobname="%~1" "\def\FileName{%~1-}\def\PageCount{%~2}\input{template}"
latex --jobname="%~1" "\def\FileName{%~1-}\def\PageCount{%~2}\input{template}"
dvisvgm --exact --font-format=woff --zoom=-1 --precision=1 "%~1"
for %%x in (aux log out toc ps dvi) do (if exist "%~1*.%%x" del "%~1*.%%x")
chrome "%~1.svg"
我还有一个模板,template.tex
如下。
% template.tex
\documentclass[dvisvgm]{article}
\usepackage{animate,graphicx}
\begin{document}
\animategraphics[palindrome,controls,loop,autoplay,scale=1]{25}{\FileName}{1}{\PageCount}%
\end{document}
测试输入文件test.tex
如下。
% test.tex
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\def\f{x^2-x-6}
\psset{unit=3,algebraic}
\def\Atom#1{%
\begin{pspicture}(-1.5,-6.5)(1.75,-2.75)
\psplot[linecolor=blue]{-1}{1}{\f}
\psline[linecolor=green,linewidth=6\pslinewidth](-1,-3.5)(#1,-3.5)
\psline[linecolor=green,linewidth=6\pslinewidth](0,0|*-1 {\f})(0,0|*{#1 .5 gt {.5}{#1} ifelse} {\f})
\psline[linecolor=orange,linestyle=dashed](#1,-3.5)(*#1 {\f})(0,0|*#1 {\f})
\pscircle*[linecolor=red](*#1 {\f}){2pt}
\psaxes[linecolor=lightgray,Oy=-3.50,Dy=.25,Dx=.5]{->}(0,-3.5)(-1.49,-6.49)(1.5,-3)[$x$,0][$y$,90]
\end{pspicture}}
\begin{document}
\multido{\r=-1.0+.125}{17}{\Atom{\r}}
\end{document}
如果我执行批处理
animator.bat test 17
它会产生以下错误。
处理第 1 页 PostScript 错误:资源状态中未定义
操作数堆栈:10 --nostringval-- false CMSY10 CMSY10 字体 CMSY10 CMSY10 CMSY10 false true
如果我没错的话,这个错误来自于dvisvgm
。
问题
如何修复?
最后更新
如果我\psaxes
通过注释禁用它,错误就会立即消失。
或者用夹层夹住animateinline
(实际上我不喜欢这样做,因为它不太灵活)
% example.tex
\documentclass[dvisvgm]{article}
\usepackage{pst-plot,animate}
\pagestyle{empty}
\psset{unit=3,algebraic}
\def\f{x^2-x-6}
\def\Atom#1{%
\psplot[linecolor=blue]{-1}{1}{\f}
\psline[linecolor=green,linewidth=6\pslinewidth](-1,-3.5)(#1,-3.5)
\psline[linecolor=green,linewidth=6\pslinewidth](0,0|*-1 {\f})(0,0|*{#1 .5 gt {.5}{#1} ifelse} {\f})
\psline[linecolor=orange,linestyle=dashed](#1,-3.5)(*#1 {\f})(0,0|*#1 {\f})
\pscircle*[linecolor=red](*#1 {\f}){2pt}
\psaxes[linecolor=lightgray,Oy=-3.50,Dy=.25,Dx=.5]{->}(0,-3.5)(-1.49,-6.49)(1.5,-3)[$x$,0][$y$,90]
}
\begin{document}
\begin{animateinline}[%
begin={\begin{pspicture}(-1.5,-6.5)(1.75,-2.75)},
end={\end{pspicture}},
controls,autoplay,loop]{25}
\newframe
\multiframe{17}{r=-1.0+.125}{\Atom{\r}}
\end{animateinline}
\end{document}
并援引
latex example
latex example
dvisvgm --exact --font-format=woff --zoom=-1 example
输出看起来非常好。
最新更新
如果我首先生成多页 PDF,将其转换为一堆单独的 PS 文件,然后使用以下批处理进行动画处理(builder.bat
)
rem builder.bat
rem %1 TeX filename without extension
rem %2 The number of pages
latex "%~1"
latex "%~1"
dvips "%~1"
ps2pdf "%~1.ps"
gswin64c -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile="%~1-%%d.ps" "%~1.pdf"
latex --jobname="%~1" "\def\FileName{%~1-}\def\PageCount{%~2}\input{template}"
latex --jobname="%~1" "\def\FileName{%~1-}\def\PageCount{%~2}\input{template}"
dvisvgm --exact --font-format=woff --zoom=-1 "%~1"
for %%x in (aux log out toc ps dvi) do (if exist "%~1*.%%x" del "%~1*.%%x")
chrome "%~1.svg"
调用builder test 17
produce 如下。请注意,test.tex
是没有的原始输入文件animateinline
。
现在它没有标签。
答案1
TeXLive-2019 中包含的 Dvisvgm-2.6.3 可以嵌入多页 PDF。这可以简化制作动画 SVG 的工作流程。
对主文档使用以下模板:
% template.tex
\documentclass[dvisvgm]{article}
\usepackage{animate,graphicx}
\begin{document}
\animategraphics[palindrome,controls,loop,autoplay,scale=1]{25}{\FileName}{}{}%
\end{document}
批处理脚本animator.bat
可能如下所示:
rem animator.bat
rem %1 TeX filename without extension
latex "%~1"
latex "%~1"
dvips "%~1"
ps2pdf "%~1.ps"
latex --jobname="%~1" "\def\FileName{%~1}\input{template}"
latex --jobname="%~1" "\def\FileName{%~1}\input{template}"
dvisvgm --exact --font-format=woff --zoom=-1 --precision=1 "%~1"
for %%x in (aux log out toc ps dvi) do (if exist "%~1.%%x" del "%~1.%%x")
chrome "%~1.svg"
跑步:
animator test
答案2
删除单词后铬合金(我没有),我运行了你的初始示例文件,没有任何问题(与 AlexG 等相同)svg 动画(带有轴值)会自动打开并在 IE 中运行(或 EDGE,如果这是你的默认 .svg 处理程序)
Win 10 带有便携版(32 位)更新的 MiKTeX 2.9(避免任何管理员/用户问题),因此无法使用 Herbert 建议的独立 dvisvgm(因为它需要挂接到注册表)没关系,我得到了没有错误信息来自运行该部分的 MiKTeX dvisvgm。
我的软件包包括(最近的更新太多,无法一一列举)
02/01/19 一些相关的 MiKTeX 库,例如 dvisvgm 和一些字体
30/12/18 Animate、pstricks 等
因此我不得不建议
1)首先检查使用在哪里你是仅有的调用 MiKTeX 版本的 dvisvgm.exe(为了进行测试,您可以在其前面加上 MiKTeX bin 的正确路径)
2) 如果使用管理的 MiKTeX 安装,请以管理员和用户身份运行更新。尽管如此(因为这些字体是 2013 amsfonts 的一部分),但可能值得删除并重新加载该包,以防它损坏。 确保两个用户通过 MiKTeX 控制台更新后,运行“任务”>“刷新数据库”尤其字体映射文件。
在 TexLive 中获得相同输出需要更长的时间
经过多次错误尝试,包括 .ps. 无法识别和 MiKTeX 未找到!(参见上面的类似消息)我通过 TL-Manager 的 GUI 版本更新了许多相关的 TexLive 包,这样我可以更轻松地检查哪些相关包有更新。
需要多次更改和更新才能最终得到相同的错误消息。
解决方案清除
因此,根据评论,我“备份”了所有软件包,并且全部更新(TL 中耗时的过程)使用任务栏操作最终手动确保字体映射和文件名数据库以及重建的格式良好。(这标记了我的配置文件需要进行一些调整。)
我也改变了 Ghost Script比当前最新版本更兼容。
1) 最终选择了完整便携式 GS 版本 9.25(因为安装的版本 9.26 提出了关于版本不匹配的评论,并且我的旧最小副本导致了一些路径错误的问题,这是我的错 :-)
在这个阶段,我建议检查你的 GS 版本,如果不是 9.25,那么考虑更换(现在)一个完整安装的副本https://github.com/ArtifexSoftware/ghostpdl-downloads/releases(避免 9.26目前)
完成后,你可以将其路径添加到 dvipsgm 命令中,类似于
dvisvgm --exact --font-format=woff --zoom=-1 --precision=1 "%~1" --libgs="C:\Program Files\GhostScript\gs9.25\bin\gsdll64.dll"
由于 {pgffor.code.tex} 出现故障,您仍然会收到来自 TeX Live 的轻微失控消息,但只需分别按两次回车键,它就会清除。
因此我的结论
如果您将所有 TeX 包正确更新至最新版本,并将 --libgs=GS9.25 添加到 TeX Native dvisvgm,您每次都会得到正确的结果(目前 :-)