使用每种边缘样式太厚都会导致 pgfmathparse Mod 出现问题

使用每种边缘样式太厚都会导致 pgfmathparse Mod 出现问题

使用时every edge/.append style = {thick}Mod无法按预期工作。不确定问题是否是我推断的,还是其他问题。

例如,考虑

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{calc,positioning}

\tikzset{
  every edge/.append style = {thick}% commenting this solves the problem
}

\begin{document}
\begin{frame}
\begin{tikzpicture}
\node (table) {};
\foreach \i in {1,...,5}{
  \pgfmathparse{mod(\i*72+18,360)}
  \node[] at (\pgfmathresult:3cm) (table) (p\i) {$F_\i$};
  \pgfmathparse{mod(\i*72+54,360)}
  \node[] at (\pgfmathresult:2cm) (table) (c\i) {$C_\i$};
}

\foreach \i in {1,...,5}{
  \pgfmathparse{Mod(\i-2,5)+1}
  \draw[->, red] (p\i) edge (c\pgfmathresult);
  \node[right=.5cm of p\i] {\pgfmathresult};% see the result of the operation, they are random numbers
}
\end{tikzpicture}
\end{frame}

\end{document}

此代码会导致问题,Mod因为它会抛出随机数(至少看起来是这样)

在此处输入图片描述

我添加了\node[right=.5cm of p\i] {\pgfmathresult};来查看操作结果。有趣的是,如果删除 ,every edge/.append style = {thick}操作将按预期进行。

我遗漏了什么?有没有办法将边缘设置得较厚并使其Mod工作?

答案1

这个怎么样

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{calc,positioning}

\tikzset{
  every edge/.append style = {thick}% commenting this solves the problem
}

\begin{document}
\begin{frame}
\begin{tikzpicture}
\node (table) {};

\foreach \i in {1,...,5}{
  \pgfmathsetmacro\myresult{int(mod(\i*72+18,360))}
  \node[] at ($(\myresult:3cm)+(table)$) (p\i) {$F_\i$};
  \pgfmathsetmacro\myresult{int(mod(\i*72+54,360))}
  \node[] at ($(\myresult:2cm)+(table)$) (c\i) {$C_\i$};
}

\foreach \i in {1,...,5}{
  \pgfmathparse{int(Mod(\i-2,5)+1)}
  \edef\myresult{\pgfmathresult}%%
  \draw[->, red,every edge/.append style={thick}] (p\i) edge (c\myresult);
  \node[right=.5cm of p\i] {\myresult};% see the result of the operation, they are random numbers
}
\end{tikzpicture}
\end{frame}

\end{document}

生成的图像(不太确定你想要什么样子)

在此处输入图片描述

你的节点语法有点混乱。我不确定你的意思是什么

\node at (<location>) (<node name>) (<node name>) {<content>};

所以我稍微修改了你的语法。

此外,mod将返回十进制值。您需要整数值。因此,我修改了您\pgfmathparse计算的这一部分。

我也说明更安全检索和使用 的值的方法\pgfmathparse。请执行以下两项操作之一

\pgfmathsetmacro\myresult{<computation>}

或者

\pgfmathparse{<computation>}
\edef\myresult{\pgfmathresult}

问题是TikZpgf都积极使用\pgfmathresult。因此,在执行可能需要它的任何操作之前,您需要先保存该值。

相关内容