嵌套的 tikzpicture 和 xelatex 有什么问题?

嵌套的 tikzpicture 和 xelatex 有什么问题?

我想在两个嵌套的 tikzpicture 之间画一条线,虽然代码使用 运行没有任何问题pdflatex,但 的结果xelatex不可接受。我不得不使用xelatex因为我的文档包含一些 RTL 文本。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[remember picture,overlay]

    \node (container1) {
        \begin{tikzpicture}
            \node [draw,] (child1) {Node 1's Child};
        \end{tikzpicture}
    };

    \node [right= 6cm of container1] (container2) {
        \begin{tikzpicture}
            \node [draw,] (child2) {Node 2's Child};
        \end{tikzpicture}
    };

    \draw [<->] (child1) to [out=0,in=180] (child2);
\end{tikzpicture}
\end{document}

而我要拍的是下面的照片 enter image description herexelatex我下一个! enter image description here

我不知道这个引擎出了什么问题,是 xelatex 的 bug 吗?

主要问题由以下最小代码引发:

\documentclass[a0paper]{xebaposter}
\usepackage{color}
\usepackage{tikz}

\tikzstyle{every picture}+=[remember picture, ]

\tikzstyle{box} = [draw, rectangle, rounded corners, thick, node distance=7em, text width=6em, text centered, minimum height=2.5em]


\begin{document}
\begin{poster}
    {
    eyecatcher=false,
    background=none,
    borderColor=black,
    textborder=faded,
    boxColorOne=yellow,
    headerColorOne=white,
    headerborder=closed,
    headershape=rounded,
    headershade=plain,
    }
    {}
    {title}
    {subtitle}
    {}

    \begin{posterbox}[name=base]{Common}
        \begin{tikzpicture}
            \node [box] (math) {math};
        \end{tikzpicture}
    \end{posterbox}

    \begin{posterbox}[name=kernel, column=1,]{Core}
        \begin{tikzpicture}
            \node [box] (stat) {statistics};
        \end{tikzpicture}  
    \begin{tikzpicture}[overlay]
      \draw [->,thick,red] (math) to [out=0,in=180] (stat);  
    \end{tikzpicture}  
    \end{posterbox}

\end{poster}
\end{document}

正如我上面所说,没有问题,pdflatex但是输出xelatex不正确!。

pdflatex输出: enter image description here xelatex输出: enter image description here *xebaposter是的修改版本baposter,可以处理 RTL 文本,目的是xepersian打包。

答案1

您应该避免嵌套 tikzpictures。有几种方法可以实现您想要的效果,我假设是将一个或多个节点包含在某种容器中。一种方法是使用scope而不是节点。在下面的示例中,我添加了一个节点container1并在其周围画了一条红色虚线,只是为了看看会发生什么。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}
  \begin{scope}[local bounding box=container1]
    \node [draw,] (child1) {Node 1's Child};
    \node[below=1cm of child1]{Test};
    \draw[dashed,red!40](container1.south west) rectangle (container1.north east);
  \end{scope}
  \begin{scope}[local bounding box=container2,shift={($(container1.east)+(6cm,0)$)}]
    \node [draw,anchor=west] (child2) {Node 2's Child};
  \end{scope}
  \draw [<->] (child1) to [out=0,in=180] (child2);
\end{tikzpicture}
\end{document}

enter image description here

另一种方法是使用fit来绘制一个节点围绕其他几个节点。这更接近于问题中所做的,因为它用一个节点包围节点,但它是按照另一种顺序进行的,首先是封闭的节点,然后是封闭。与上图相同的图片变成了(如果您想要更紧密的贴合,只需添加inner sep=0pt)。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}
  \node [draw,] (child1) {Node 1's Child};
  \node [below=1cm of child1](Test){Test};
  \node [draw=red!40,dashed,fit={(child1) (Test)}] (container1){};
  \node [draw,anchor=west,right=6cm of container1] (child2) {Node 2's Child};
  \draw [<->] (child1) to [out=0,in=180] (child2);
\end{tikzpicture}
\end{document}

enter image description here

第三种选择是tikzpicture使用选项执行两个独立的 s remember picture,这意味着所有名称都被记住。然后使用第三个tikzpicture带有附加参数的s overlay,这意味着它不占用任何空间,它绘制箭头。(我已\usepackage{lipsum}在序言中添加了一些文字,在图片之间写了一些文字。编译两次以获得正确的箭头。

\begin{tikzpicture}[remember picture]
  \node [draw,] (child1) {Node 1's Child};
  \node [below=1cm of child1](Test){Test};
  \draw[dashed,red!40](current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\begin{minipage}{6cm}
  \lipsum[2]
\end{minipage}
\begin{tikzpicture}[remember picture]
  \node [draw,anchor=west] (child2) {Node 2's Child};
\end{tikzpicture}
\begin{tikzpicture}[remember picture,overlay]
  \draw [<->,thick,red] (child1) to [out=0,in=180] (child2);  
\end{tikzpicture}

enter image description here

相关内容