怎么可能完全在 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
有将\pdfliteral
PDF 代码写入 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
了解更多信息。