Tikzpicture 根据 TeX 引擎有不同的输出

Tikzpicture 根据 TeX 引擎有不同的输出

连续回答这个问题如何避免节点内部的转移答案如下:嵌套 tikzpictures、样式继承和保存框,据我所知,相同的tikzpicture代码有不同的输出。

下面的代码如下所示pdflatexlualatex

在此处输入图片描述

但有xelatex

在此处输入图片描述

这是一个有趣的选择,根据以下情况处理这两种可能性将会很有用:图片作者的选择. 该代码可被另一个带有另一个 tex 引擎的应用程序重复使用。

问题 1:是否有可能从和引擎xelatex中的行为中受益,反之亦然?pdflatexlualatex

问题2 :xelatex保护免遭继承的技巧是什么?

\documentclass{standalone}
\usepackage{tikz,ifluatex}
\usetikzlibrary{automata, positioning}

\ifluatex
    \let\pdfpagewidth\pagewidth
    \let\pdfpageheight\pageheight
\fi

\newsavebox{\blankbox}
\savebox{\blankbox}{\hspace{0.1ex}\tikz[baseline=0.1em]{%
    \node [shape=rectangle, anchor=south, draw, inner sep=0pt, minimum width=1ex, minimum height=0.9em] (char) {}}%
  \hspace{0.1ex}}

\begin{document}
  \begin{tikzpicture}[auto, shorten >=1pt, >=latex]
    \node[state] (0) {\usebox{\blankbox}};
    \node[state, dotted, right=1ex of 0] (1) {\usebox{\blankbox}};
  \end{tikzpicture}
\end{document}

答案1

发生这种情况是因为系统层pgf在使用 (x)dvipdfmx 驱动程序插入框时故意重置破折号样式。如果你查看那里的代码,你会发现:

\def\pgfsys@hbox#1{%
  \pgfsys@beginscope%
    \setbox#1=\hbox{\box#1}%
    \wd#1=0pt%
    \ht#1=0pt%
    \dp#1=0pt%
    \pgfsys@dvipdfmx@suspendcontent%
    \pgfsys@invoke{0 J [] 0 d}% reset line cap and dash
    \pgfsys@dvipdfmx@start@force@reset@color%
    \box#1%
    \pgfsys@dvipdfmx@stop@force@reset@color%
    \pgfsys@dvipdfmx@unsuspendcontent%
  \pgfsys@endscope%
}

而对于 pdfTeX 你会得到

\def\pgfsys@hbox#1{%
  \pgfsys@beginscope%
    \setbox#1=\hbox{\box#1}%
    \wd#1=0pt%
    \ht#1=0pt%
    \dp#1=0pt%
    \box#1%
  \pgfsys@endscope%
}

我认为有人可能会认为这两种行为都是“正确的”,但我更倾向于后者。您可以愉快地将“重置”行添加到 pdfTeX 版本(格式相同)。

相关内容