我有一个用 TikZ 制作的极坐标图,我曾经在一些旧文档中绘制过它。现在我想在我的文档类中使用它,而不是在绘制图的每个地方都使用整个代码片段。
根据这个问题可以将 TikZ 图片放入 \newcommand 中并向其传递变量。问题是此代码中还有一个 \def,它使用 #1、#2 等。如何将变量传递到自定义 \newcommand 中,同时仍将 \def 用于其他变量?
\documentclass[12pt]{report}
\usepackage[table]{xcolor}
\usepackage{tikz}
\usepackage{pstricks}
\usepackage{pstricks-add,pst-slpe}
\usepackage{pgfmath}
\usepackage{xifthen}
\usetikzlibrary{decorations.text, arrows.meta,calc,shadows.blur,shadings}
\begin{document}
\begin{figure}
\centering
\resizebox{.52\textwidth}{!}
{
\begin{tikzpicture}[
% Environment Cfg
font=\Large,
scale=1,
% Styles
Grid/.style={
loosely dotted,
line width=1.3pt,
color=black
},
Separator/.style={
thick,
color=black!52
},
Border/.style={
line width=1.3pt,
color=black!65
},
Border2/.style={
line width=2.6pt,
color=blue!13
},
Fill/.style={
fill=blue,
opacity=0.13
}
]
%Variables: 1:levels, 2:grid 3:number of features 4: Feature_name/quantity
% 5: anchor align 6: numbers position 7:Relative position 8: ID
\def\goalswheelS#1#2#3#4[#5][#6](#7)(#8){%
\begin{scope}[shift={(#7)}]
%Drawing the numbers.
\foreach \n [count=\m] in {0,#2,...,#1}{
\node[anchor=#5] (A) at (#6:\n+0.2){\n};
}
%Drawing the grid
\foreach \n in {0,#2,...,#1}{
\foreach [count=\i, evaluate=\i as \x using int(\i+1)]\m in {0,1,...,#3}{
\draw[Grid](360/#3*-\i:\n) -- (360/#3*-\x:\n);
\draw[Fill](360/#3*-\i:\n) -- (0,0) -- (360/#3*-\x:\n);
}
}
%Drawing features separations.
\foreach \m [count=\i] in {0,1,...,#3}{
\draw[Separator] (0,0) -- (360/#3*-\i: #1);}
%Drawing the border
\draw[fill=black, opacity=0.1] (0,0) circle [radius=#1];
\draw[Border] (0,0) circle [radius=#1];
%Drawing the names
\foreach \o/\p [count=\j from 0] in {#4}{
\pgfmathparse{int(360/#3*-\j)}
\ifthenelse{\pgfmathresult =90 \OR \pgfmathresult =270}
{%True
\draw (360/#3*\j:#1+0.7) node [anchor=center]{\huge\o};
}
{%false
\ifthenelse{\pgfmathresult <90 \OR \pgfmathresult >270}
{% True
\draw (360/#3*-\j:#1+0.7) node [anchor=west]{\huge\o};
}
{%False
\draw (360/#3*-\j:#1+0.7) node [anchor=east]{\huge\o};
}
}
\coordinate (#8c\j) at (360/#3*-\j:\p);
}
\coordinate (#8c#3) at (#8c0);
\foreach \o/\p [count=\i from 0, evaluate=\i as \x using int(\i+1)] in {#4}{%Close the perimeter
\draw[Border2] (#8c\i) -- (#8c\x);
\draw[fill=blue, opacity=.52] (#8c\i) --(0,0) -- (#8c\x);
}
\end{scope}
}
% This function draws the goalswheel
%\goalswheel{levels}{grid}{number of features}{feature_name/quantity}[anchor angle][numbers direction in degrees][relative position](ID);
\goalswheelS{100}{25}{20}{
Mål1/50,
Delmål1.1/55,
Delmål1.2/46,
Delmål1.3/52,
Mål 2/20,
Delmål 2.1/24,
Delmål 2.2/14,
Delmål 2.3/22,
Mål 3/75,
Delmål 3.1/64,
Delmål 3.2/84,
Delmål 3.3/74,
Mål 4/35,
Delmål 4.1/43,
Delmål 4.2/34,
Delmål 4.3/24,
Mål 5/5,
Delmål 5.1/4,
Delmål 5.2/4,
Delmål 5.3/5
}[90][0](25,-25)(1);
\end{tikzpicture}
}
\end{figure}
\end{document}
如果您尝试这个 MWE,您还会在代码中发现一些其他奇怪之处,我非常感谢您的帮助。 给出超过 10 的级别将使文本越来越小,直到它不可见(例如在级别为 100 的示例中),并且将网格调整到更大的空间(例如示例中的 25 个单位)不会使文本可见。 将级别更改为 5 并将网格更改为 1 会产生可见文本(但每个特征的值也必须减小)。 此外,锚点角度(示例中为 90 度)没有任何作用,我认为它曾经这样做过,所以也许 TikZ 有一些更新? 锚点角度用于旋转整个图形,以便您可以将轴向上、向下或向左放置(默认为右)。 无论如何,这些都是奖励问题,我真正需要的是找到一种方法将此代码移动到我的文档类中,以命令或函数的形式,我可以从 .tex 文档中调用该命令或函数。