绘图的图元来自哪里?

绘图的图元来自哪里?

我目前想知道像这样的软件包tikz是如何工作的。我读过TeX 书并且没有发现任何 TeX 基元能够绘制东西的证据。LaTeX 只是宏的集合,因此使用 LaTeX 无法提供此功能。

是个pdfTeX引擎是否提供了生成绘图所需的图元?如果是,这些图元是什么?

答案1

我的 Windows 上的 TeX Live 包含以下文件夹

c:/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/

在这里您会发现许多文件,例如,,,pgfsys-pdftex.def等等......pfgsys-dvips.defpgfsys-luatex.defpgfsys-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 等意味着 TiZ 宏仅使用适当的\special节点:这些只是被运出,而 dvips 的工作就是使用它们来实际打印某些东西。

相关内容