以下代码不起作用:
\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{positioning, calc}
\newcommand\machin{
\pgfmathparse{1}
\pgfmathresult
}
\pgfmathsetmacro\truc{\machin}
\begin{document}
\end{document}
有人知道我怎样才能让我的命令\machin
返回一个我可以使用的结果\pgfmathsetmacro
吗?
感谢您的帮助
编辑:我想做类似的事情:
\newcommand\longueur[4]{
\pgfmathparse{((#1-#3)^2+(#2-#4)^2)^0.5}
\pgfmathresult
}
\newcommand\setEchelle[6]{
\pgfmathsetmacro\Echelle{500*(#6)/3.6/\longueur{#1}{#3}{#4}{#5}}
}
答案1
您不能\longueur
在 的参数中使用\pgfmathsetmacro
,因为 中的命令\pgfmathparse
不可扩展。您可以定义一个\setlongueur
宏,\pgfmathsetmacro
像在
\newcommand\setlongueur[4]{%
\pgfmathsetmacro\temp{((#1-#3)^2+(#2-#4)^2)^0.5}
}
\newcommand\setEchelle[6]{%
\setlongueur{#1}{#3}{#4}{#5}%
\pgfmathsetmacro\Echelle{500*(#6)/3.6/\temp}
}
或者你使用不同的方法expl3
:
\usepackage{xparse} % also loads expl3
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\longueur}{mmmm}
{
\fp_eval:n {((#1-#3)^2+(#2-#4)^2)^0.5}
}
\NewDocumentCommand{\setEchelle}{mmmmmm}
{
\tl_set:Nx \Echelle
{
\fp_eval:n {500*(#6)/3.6/\longueur{#1}{#3}{#4}{#5}}
}
}
\ExplSyntaxOff
完整示例。首先使用 TikZ 的 calc 包。
\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{positioning, calc}
\newcommand\setlongueur[4]{%
\pgfmathsetmacro\temp{((#1-#3)^2+(#2-#4)^2)^0.5}
}
\newcommand\setEchelle[6]{%
\setlongueur{#1}{#3}{#4}{#5}%
\pgfmathsetmacro\Echelle{500*(#6)/3.6/\temp}
}
\begin{document}
\setEchelle{1}{2}{3}{4}{5}{6}\Echelle
\end{document}
这输出
231.1417
现在同样如此expl3
:
\documentclass{standalone}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\longueur}{mmmm}
{
\fp_eval:n {((#1-#3)^2+(#2-#4)^2)^0.5}
}
\NewDocumentCommand{\setEchelle}{mmmmmm}
{
\tl_set:Nx \Echelle
{
\fp_eval:n {500*(#6)/3.6/\longueur{#1}{#3}{#4}{#5}}
}
}
\ExplSyntaxOff
\begin{document}
\setEchelle{1}{2}{3}{4}{5}{6}\Echelle
\end{document}
这输出
231.1250817605121
可以使用以下方式限制小数位数round
:
\fp_eval:n {round(500*(#6)/3.6/\longueur{#1}{#3}{#4}{#5},4)}
你会得到
231.1251