我目前想知道像这样的软件包tikz
是如何工作的。我读过TeX 书并且没有发现任何 TeX 基元能够绘制东西的证据。LaTeX 只是宏的集合,因此使用 LaTeX 无法提供此功能。
是个pdfTeX引擎是否提供了生成绘图所需的图元?如果是,这些图元是什么?
答案1
我的 Windows 上的 TeX Live 包含以下文件夹
c:/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/
在这里您会发现许多文件,例如,,,pgfsys-pdftex.def
等等......pfgsys-dvips.def
pgfsys-luatex.def
pgfsys-xetex.def
根据您编译文件的方式,系统会加载相应的文件。在那里,TeX 指令被“翻译”成驱动程序相关.def
的指令。例如,pgfsys-pdftex.def
\def\pgfsys@invoke#1{\pdfliteral{#1}}
虽然pgfsys-luatex.def
有
\def\pgfsys@invoke#1{\pdfextension literal{#1}}
并且pgfsys-dvips.def
\def\pgfsys@invoke#1{\special{ps\ifpgfsys@ps@boxmode\else:\fi: #1}}
类似地,全部钛钾最后,Z 宏被映射到适当的驱动程序指令中。例如,pgfsys-common-pdf.def
(由pdftex
和 所用luatex
)具有
\def\pgfsys@miterjoin{\pgfsysprotocol@literal{0 j}}
\def\pgfsys@roundjoin{\pgfsysprotocol@literal{1 j}}
\def\pgfsys@beveljoin{\pgfsysprotocol@literal{2 j}}
虽然pgfsys-common-postscript.def
有
\def\pgfsys@miterjoin{\pgfsysprotocol@literal{0 setlinejoin}}
\def\pgfsys@roundjoin{\pgfsysprotocol@literal{1 setlinejoin}}
\def\pgfsys@beveljoin{\pgfsysprotocol@literal{2 setlinejoin}}
等等。
pdfTeX 在某种意义上是它自己的驱动程序,因此可以\pdfliteral
直接使用。另一方面,使用 dvips 等意味着 Ti钾Z 宏仅使用适当的\special
节点:这些只是被运出,而 dvips 的工作就是使用它们来实际打印某些东西。