Tikz:使用标记装饰时名称路径会丢失

Tikz:使用标记装饰时名称路径会丢失

我正在尝试在名为 的曲线路径内绘制一个箭头uu,该路径与名为 的垂直线相交vert,并在这两条路径的交叉处放置两个节点。这是我的最小示例:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections,decorations.markings}

\tikzset{->-/.style={decoration={
                       markings,
                       mark=at position #1 with {\arrow{>}}},
                     postaction={decorate}}
}

\begin{document}

\begin{tikzpicture}
\path[draw, name path=vert] (0,-1)--(0,1);
\path[draw, ->-=0.8, name path=uu] (-1,-0.7) to[out=0,in=-90] (0.3,0)
   to[out=90,in=0] (-1,0.7);
\draw [name intersections={of=vert and uu}] (intersection-1)  node {o};
\draw [name intersections={of=vert and uu}] (intersection-2)  node {o};
\end{tikzpicture}

\end{document}

编译它会产生以下错误消息:

! Package tikz Error: I do not know the path named `uu'. Perhaps you misspelt it.

->-=0.8路径中的选项以uu某种方式破坏了名称uu。我该如何解决这个问题?

答案1

我不会冒险给出一个大概的解释,但是使用来自循环空间的代码,您可以分别执行以下步骤:

  1. 定义并命名您的uu路径;

  2. 绘制它,可能应用装饰作为postaction

这解决了这里的问题。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections,decorations.markings}

% Code from Loop Space: <https://tex.stackexchange.com/a/26386/73317>
\makeatletter
\tikzset{
  use path for main/.code={%
    \tikz@addmode{%
      \expandafter\pgfsyssoftpath@setcurrentpath\csname tikz@intersect@path@name@#1\endcsname
    }%
  },
  use path for actions/.code={%
    \expandafter\def\expandafter\tikz@preactions\expandafter{\tikz@preactions\expandafter\let\expandafter\tikz@actions@path\csname tikz@intersect@path@name@#1\endcsname}%
  },
  use path/.style={%
    use path for main=#1,
    use path for actions=#1,
  }
}
\makeatother

\tikzset{->-/.style={decoration={
                       markings,
                       mark=at position #1 with {\arrow{>}}},
                     postaction={decorate}}
}

\begin{document}

\begin{tikzpicture}

\path[draw, name path=vert] (0,-1)--(0,1);

% First define and name the path
\path[name path=uu]
  (-1,-0.7) to[out=0,in=-90] (0.3,0) to[out=90,in=0] (-1,0.7);
% Then draw it using the 'use path' style from Loop Space
\draw[use path=uu, ->-=0.8];

\draw [name intersections={of=vert and uu}] (intersection-1)  node {o};
\draw [name intersections={of=vert and uu}] (intersection-2)  node {o};

\end{tikzpicture}

\end{document}

截屏

答案2

在类似的情况下,我刚刚发现替换postaction确实preaction可以解决这个“消失的路径”问题。

但是,我不是 Tikz 专家,所以我不知道是否推荐这种解决方案。

而且我没有和你相同的乳胶分布,所以我无法检查这是否真的解决了你的问题。

相关内容