如何在 Tikz 新命令中计算坐标?

如何在 Tikz 新命令中计算坐标?

我想用 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

如果问题是你是否可以将一个数组传递给命令,并且 TiZ 处理其条目,答案是肯定的。

\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}

相关内容