连续回答这个问题如何避免节点内部的转移答案如下:嵌套 tikzpictures、样式继承和保存框,据我所知,相同的tikzpicture
代码有不同的输出。
下面的代码如下所示pdflatex
,lualatex
但有xelatex
:
这是一个有趣的选择,根据以下情况处理这两种可能性将会很有用:图片作者的选择. 该代码可被另一个带有另一个 tex 引擎的应用程序重复使用。
问题 1:是否有可能从和引擎xelatex
中的行为中受益,反之亦然?pdflatex
lualatex
问题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 版本(格式相同)。