我想避免\usepackage[nomessages]{fp}
使用
\FPeval\height{round(6*sin(pi/3):6)}%
\begin{pspicture}(6,\height)
只是为了获得更紧凑的代码,即不使用临时变量\height
。实际上使用上述方法并不是一个大问题,但我只是好奇我是否可以使其更紧凑。
我想要实现的是检查PGF中是否存在有用的包,以便我可以按如下方式重写上述代码。
\begin{pspicture}(6,6*sin(pi/3))
见过有人用calc
,不过还没试过,完整代码如下。
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\usepackage[nomessages]{fp}
\begin{document}
% not so compact
\FPeval\height{round(6*sin(pi/3):6)}%
\begin{pspicture}(6,\height)
\pspolygon(6,0)(6;60)
\end{pspicture}
% preferred
\begin{pspicture}(6,6*sin(pi/3))
\pspolygon(6,0)(6;60)
\end{pspicture}
\end{document}
欢迎任何建议。
答案1
评论
您可以使用l3fp
支持许多内置函数的程序。它由 自动加载xparse
。
让我们看一下定义并详细说明它的作用
\DeclareExpandableDocumentCommand{\eval}{m}{ \fp_to_decimal:n {#1} }
\DeclareExpandableDocumentCommand
是‘可扩展的’,允许\eval
在 TeX‘期望’数字的地方使用:大多数文档命令应该是‘受保护的’,这就是它的作用\NewDocumentCommand
。{\eval}
是新宏的名称。{m}
代表一个米任意参数(o
对于可选,s
对于星号)。{ \fp_to_decimal:n {#1} }
是 的定义\eval
。它使用第一个参数\fp_to_decimal
来调用。冒号后面的 代表 所期望的值的类型;代表带括号的标记列表。l3fp
#1
n
\fp_to_decimal
n
执行
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
% FP
\usepackage[nomessages]{fp}
% l3fp
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\eval}{m}{ \fp_to_decimal:n {#1} }
\ExplSyntaxOff
% PGF
\usepackage{tikz}
\begin{document}
% FP
\FPeval\height{round(6*sin(pi/3):6)}%
\begin{pspicture}(6,\height)
\pspolygon(6,0)(6;60)
\end{pspicture}
% l3fp
\begin{pspicture}(6,\eval{6*sin(pi/3)})
\pspolygon(6,0)(6;60)
\end{pspicture}
% PGF
% don't forget "r" to tell PGF, that the argument is in radians
\pgfmathparse{6*sin(pi/3 r)}
\begin{pspicture}(6,\pgfmathresult)
\pspolygon(6,0)(6;60)
\end{pspicture}
\end{document}