我想用 Tikz 进行参数化绘图,但我不知道如何将参数传递给包或如何进行计算。这是一个 MWE,但由于错误,它根本不起作用。
\documentclass{article}
\usepackage{tikz}
\newdimen{\dh}
\newdimen{\db}
\newdimen{\dt}
\newdimen{\dr}
\newcommand{\uc}[4]{
\setlength{\dh}{#1 cm}
\setlength{\db}{#2 cm}
\setlength{\dt}{#3 cm}
\setlength{\dr}{#4 cm}
\draw [red, thick] (0cm,\db-\dr) -- (\dr,0cm);
}
\begin{document}
\begin{tikzpicture}
\uc{10,8,3,1}
\end{tikzpicture}
\end{document}
答案1
如果问题是你是否可以将一个数组传递给命令,并且 Ti钾Z 处理其条目,答案是肯定的。
\documentclass{article}
\usepackage{tikz}
\newcommand{\uc}[1]{%
\draw [red, thick] (0,{{#1}[1]-{#1}[3]}) -- ({{#1}[3]},0);
}
\begin{document}
\begin{tikzpicture}
\uc{10,8,3,1}
\end{tikzpicture}
\end{document}
{#1}[0]
在这里,您可以使用、{#1}[1]
、{#1}[2]
和来获取数组的条目 1、2、3、4 ,{#1}[3]
即索引从 0 开始。例如,在本例中{#1}[3]
是列表的第四个条目,即最后一个条目1
。我们需要额外的括号,以便解析器不会在方括号上绊倒。无需引入新的维度。同样的语句适用于pic
下面的 s。
如果问题是如何消除错误:你定义\uc
为一个带有四个参数的命令,但只传递给它一个列表,即一个参数,但有四个条目。最小损坏修复可能是
\documentclass{article}
\usepackage{tikz}
\newdimen{\dh}
\newdimen{\db}
\newdimen{\dt}
\newdimen{\dr}
\newcommand{\uc}[4]{
\setlength{\dh}{#1 cm}
\setlength{\db}{#2 cm}
\setlength{\dt}{#3 cm}
\setlength{\dr}{#4 cm}
\draw [red, thick] (0cm,\db-\dr) -- (\dr,0cm);
}
\begin{document}
\begin{tikzpicture}
\uc{10}{8}{3}{1}
\end{tikzpicture}
\end{document}
但我认为上面的更好。结果总是一样的:
我个人不会使用它们中的任何一个,但是pic
,例如
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[pics/uc/.style={code={
\draw [red, thick] (0,{{#1}[1]-{#1}[3]}) -- ({{#1}[3]},0);}}]
\path pic{uc={10,8,3,1}};
\end{tikzpicture}
\begin{tikzpicture}[pics/uc/.style={code={
\draw (0,{{#1}[1]-{#1}[3]}) -- ({{#1}[3]},0);}}]
\path pic[red, thick]{uc={10,8,3,1}};
\end{tikzpicture}
\end{document}