字体格式:--font-format=woff2

字体格式:--font-format=woff2

我从手册 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 上打开了生成的文件,没有任何动画。

  1. 我应该如何编译 TikZ 3.1 的动画?

    • 在命令行上
    • 与 Texmaker 合作
    • 使用 TeXstudio
  2. 那么我们怎样打开这些文件呢?

    • 可以使用 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 中的动画,但可以截取快照:

  1. 删除 dvisvgm 选项

  2. 然后使用 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

默认字体格式dvisvgmSVG 输出中嵌入的不是大多数 WEB 浏览器都能正确解释。相反,浏览器会使用一些替换字体,例如時間。此外,数学符号可能会显示不正确:

所以,总是添加选项--font-format=woff2!!!默认字体格式可能会在未来dvisvgm版本中改变。


改进的边界框计算:--exact

当前标准 SVG-1.1 是一种单页文档格式,主要用于创建嵌入到网页 HTML 代码中的矢量图形。因此,dvisvgm会尝试计算页面内容周围的紧密边界框,类似于 类standalone的用途。也可以将article类与 一起使用\pagestyle{empty},以在不使用 的情况下实现相同效果standalonedvisvgm会尝试裁剪可见内容周围的页面。

对于纯文本文档,不使用将页面边框向外推的图形对象,输出的最终边界框由所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

难以置信!使用animateAlexander 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}

在此处输入图片描述

相关内容