将 \newcommand 与 \def 组合/嵌套并以不同的方式引用 #1、#2 等?

将 \newcommand 与 \def 组合/嵌套并以不同的方式引用 #1、#2 等?

我有一个用 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 文档中调用该命令或函数。

相关内容