PGF/TikZ 如何工作?

PGF/TikZ 如何工作?

怎么可能完全在 TeX 语言中开发出一个巨大的矢量图形包 PGF/TikZ?它的内部究竟是如何运作的?它依靠哪些技术和 TeX 基元在我的 TeX 文档中生成图形输出?

答案1

让我们看一个简单的例子

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\tracingmacros=1
\draw (0,0)--(1,1);
\end{tikzpicture}
\end{document}

\tracingmacros=1指令将显示日志文件中的所有宏扩展。

编译后latex我们发现

\pgfsys@invoke #1->\special {ps:: #1}
#1<-0.0 0.0 moveto 

\pgfsys@invoke #1->\special {ps:: #1}
#1<-28.3468 28.3468 lineto 

\pgfsys@invoke #1->\special {ps:: #1}
#1<-pgfstr 

我们pdflatex发现

\pgfsys@invoke #1->\pdfliteral {#1}
#1<-0.0 0.0 m 

\pgfsys@invoke #1->\pdfliteral {#1}
#1<-28.3468 28.3468 l 

\pgfsys@invoke #1->\pdfliteral {#1}
#1<-S 

我们xelatex看到

\pgfsys@invoke #1->\special {pdf:code #1}
#1<-0.0 0.0 m 

\pgfsys@invoke #1->\special {pdf:code #1}
#1<-28.3468 28.3468 l 

\pgfsys@invoke #1->\special {pdf:code #1}
#1<-S 

最后lualatex(使用 LuaTeX v. 0.90),生成

\pgfsys@invoke #1->\pdfextension literal{#1}
#1<-0.0 0.0 m 

\pgfsys@invoke #1->\pdfextension literal{#1}
#1<-28.3468 28.3468 l 

\pgfsys@invoke #1->\pdfextension literal{#1}
#1<-S 

高级图形命令被翻译成低级命令,但对于所使用的每个引擎来说都是不同的。PGF 有各种驱动程序并加载相关的驱动程序,从而提供专门针对所用引擎的翻译。

原语\special只是将其参数写入 DVI(或 XDV)文件,而dvips或 的职责xdvipdfmx是使用此代码提供图形渲染。pdftex有将\pdfliteralPDF 代码写入 PDF 文件的功能, 和 相同luatex,只是名称不同。

处理每个可能的图形命令都需要一本书。查看文件

/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf-via-dvi.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-postscript.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-svg.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvi.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfm.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfmx.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvips.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvisvgm.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-tex4ht.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-textures.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-vtex.def
/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-xetex.def

了解更多信息。

相关内容