在我的整个文档中,我需要一个自定义符号,我用 TikZ 绘制它。我为它创建了一个宏,所以我不需要复制图片。我还需要在其他tikzpicture
s 中使用该符号。这里的问题是样式继承:外部图片的样式不能干扰宏生成的符号。
答案这个问题和这个问题建议使用保存箱来解决这个问题。我试过这样做,但到目前为止,失败了。这是一个最小的工作示例:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{automata, positioning}
\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}
及其输出
可以看到,右侧节点的样式被矩形继承。
我的问题是:如何在仍然到处使用相同的宏的情况下解决这个问题?
编辑:在评论中,Zarko 建议手动更改内图的线型。这显然解决了此特定示例中的问题,但我还需要设置哪些其他属性来“保护”内图?我尝试了一些(例如,,,color
),但(令我惊讶的是)这些都没有被继承。这是否意味着只有被继承了?double
decoration
rotate
dash pattern
答案1
如果您可以选择切换到另一个引擎,XeTeX 将按照您的意愿运行。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{automata, positioning}
\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}
答案2
你不能。你不能用盒子保护内部图片。你不能用 保护内部图片.pic
。即使你将内部图片外部化然后再包含回来,你也无法保护它。
事实上,你可以 更改完成的 PDF 文件中的颜色。
@Heiko Oberdiek 的回答表明,继承所有内容确实是 PDF 的功能。您所能做的就是重置可能影响内部图片的每个参数。
幸运的是,有一个有限的参数列表,可以在 PDF 规范中找到。祝你好运。