我从手册 3.1 第 221 页复制并粘贴了示例,然后尝试使用 Texmaker 对其进行编译。
\documentclass[dvisvgm]{standalone}
\usepackage{tikz}
\usetikzlibrary{animations}
\begin{document}
\tikz
\node :fill opacity = { 0s="1", 2s="0", begin on=click }
:rotate = { 0s="0", 2s="90", begin on=click }
[fill = blue!20, draw = blue, ultra thick, circle]
{Click me!};
\end{document}
生成的文件.pdf
结果如下:
手册上给出的示例结果如下:
我.pdf
在 Chrome、Opera 和 Firefox 上打开了生成的文件,没有任何动画。
我应该如何编译 TikZ 3.1 的动画?
- 在命令行上
- 与 Texmaker 合作
- 使用 TeXstudio
那么我们怎样打开这些文件呢?
- 可以使用 PDF 阅读器查看它们吗?
- 是否必须使用网络浏览器?
答案1
动画仅适用于 SVG 格式。因此,您应该首先使用 latex(而不是 pdflatex)编译示例。然后您应该运行,dvisvgm file
它将在命令行中显示类似以下内容
C:\Users\XXX\Documents\tests>dvisvgm test-utf8
pre-processing DVI file (format version 2)
processing page 1
graphic size: 66.670012pt x 51.11758pt (23.431829mm x 17.965775mm)
output written to test-utf8.svg
1 of 1 page converted in 1.64 seconds
然后,您将在文件夹中找到一个 .svg 文件,您可以在浏览器或其他支持 svg 的应用程序中打开它。
您无法看到 pdf 中的动画,但可以截取快照:
删除 dvisvgm 选项
然后使用 pdflatex 运行它
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{animations}
\begin{document}
\foreach \t in {0.5, 1, 1.5, 2}
{
\tikz[make snapshot of=\t]
\node :fill opacity = { 0s="1", 2s="0", begin on=click }
:rotate = { 0s="0", 2s="90", begin on=click }
[fill = blue!20, draw = blue, ultra thick, circle]
{Click me!};}
\end{document}
答案2
TikZ 手册中没有提到一些dvisvgm
命令行选项,但通常应该使用。
字体格式:--font-format=woff2
LaTeX 输入(用latex
或编译dvilualatex
):
\documentclass[varwidth]{standalone}
\usepackage{amsmath}
\begin{document}
Hello World!
\begin{equation*}
\int_0^1 2x dx = 1
\end{equation*}
\end{document}
编译使用:
latex texsx-469409-a
dvisvgm --zoom=-1 --exact --font-format=woff2 texsx-469409-a
默认字体格式dvisvgm
SVG 输出中嵌入的不是大多数 WEB 浏览器都能正确解释。相反,浏览器会使用一些替换字体,例如時間。此外,数学符号可能会显示不正确:
所以,总是添加选项--font-format=woff2
!!!默认字体格式可能会在未来dvisvgm
版本中改变。
改进的边界框计算:--exact
当前标准 SVG-1.1 是一种单页文档格式,主要用于创建嵌入到网页 HTML 代码中的矢量图形。因此,dvisvgm
会尝试计算页面内容周围的紧密边界框,类似于 类standalone
的用途。也可以将article
类与 一起使用\pagestyle{empty}
,以在不使用 的情况下实现相同效果standalone
;dvisvgm
会尝试裁剪可见内容周围的页面。
对于纯文本文档,不使用将页面边框向外推的图形对象,输出的最终边界框由所tfm
用字体文件中的字形框决定。但是,这些框往往比字形本身小。这可能会导致输出被裁剪,其中部分字形由于超出文档边缘而无法显示。
dvisvgm
提供选择--exact
以这样的方式计算文档的边界框,使得字形轮廓完全落在最终的边界框内。
或者,可以使用非负长度值设置文档类border
的选项standalone
,以便在内容周围添加空格。这需要dvisvgm
使用选项来调用--bbox=papersize
。[@Martin 的评论]
响应式 SVG:--zoom=-1
Option--zoom=-1
可生成“响应式 SVG”,可自动缩放以填充可用空间。此类 SVG 没有固定大小。这对于使用 HTML 容器(例如<object>
或 )将 SVG 嵌入到网页中非常重要<img>
。
LaTeX 输入(用latex
或编译dvilualatex
):
\documentclass[dvisvgm]{standalone}
\usepackage{tikz}
\usetikzlibrary{animations}
\begin{document}
\tikz
\node :fill opacity = { 0s="0", 5s="1" }
:rotate = { 6s="0", 10s="360", repeats, restart=false}
[fill = blue!20, draw = blue, ultra thick, circle]
{Hello!};
\end{document}
编译使用:
latex texsx-469409
dvisvgm --zoom=-1 --exact --font-format=woff2 texsx-469409
嵌入的 HTML 代码:
<img src="https://agrahn.gitlab.io/svg/texsx-469409.svg" width="200"/>
<img src="https://agrahn.gitlab.io/svg/texsx-469409.svg" width="400"/>
<img src="https://agrahn.gitlab.io/svg/texsx-469409.svg"/>
答案3
配置 Texstudiodvisvgm
魔法评论
对于 texstudio 来说,编译 svg 动画的快速方法是使用魔术注释,即以下文件中的第一行
% !TeX TS-program = latex % | latex % | dvisvgm --exact --font-format=woff --zoom=-1 %.dvi
\documentclass[dvisvgm]{standalone}
\usepackage{tikz}
\usetikzlibrary{animations}
\begin{document}
\tikz
\node :fill opacity = { 0s="1", 2s="0", begin on=click }
:rotate = { 0s="0", 2s="90", begin on=click }
[fill = blue!20, draw = blue, ultra thick, circle]
{Click me!};
\end{document}
这将运行 latex 两次,然后将其转换为动画 svg
创建自定义用户命令
另一种方法是创建自定义用户命令。在 texstudio 中preferences->build
添加以下行
latex % | latex % | dvisvgm --exact --font-format=woff --zoom=-1 %.dvi
在“用户命令”下:
然后可以在菜单栏中找到它Tools->user->svg
(或您在上一步中选择的任何名称)
(如果 dvisvgm 不在您的路径变量中,请dvisvgm
在上述命令中将其替换为其安装位置的完整路径)
阿拉拉
如果使用 arara 编译,以下文档将生成动画 svg:
% !TeX program = txs:///arara
% arara: latex
% arara: latex
% arara: dvisvgm : {options: ['--exact', '--font-format=woff', '--zoom=-1']}
\documentclass[dvisvgm]{standalone}
\usepackage{tikz}
\usetikzlibrary{animations}
\begin{document}
\tikz
\node :fill opacity = { 0s="1", 2s="0", begin on=click }
:rotate = { 0s="0", 2s="90", begin on=click }
[fill = blue!20, draw = blue, ultra thick, circle]
{Click me!};
\end{document}
答案4
难以置信!使用animate
Alexander Grahn 软件包甚至可以处理 PDF 文件。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{animations}
\usepackage{animate}
\newcommand{\myAnim}[1]{
\begin{tikzpicture}[make snapshot of=#1]
\draw (1,.5) circle [radius=1mm];
\node :shift = {
along = {(0,0) circle[radius=5mm]} upright,
0s="0", 2s="1", begin on=click }
at (1,.5) [fill = blue, opacity=.5, circle] {Click};
\end{tikzpicture}
}
\begin{document}
\pagestyle{empty}
\begin{animateinline}[autoplay,loop]{2}
\multiframe{5}{nSec=0+0.5}{
\myAnim{\nSec}
}
\end{animateinline}
\end{document}