我想做以下算术:
(x-y)*unit/s
其中x
,,为有理常数,y
为长度单位。s
unit
\documentclass{article}
\usepackage{calc}
\newlength\unit
\unit=16pt
\def\x{0.5}
\def\y{0.3}
\def\s{0.8}
\newlength\temp
\begin{document}
\temp=\unit/\real{\s}*(\real{\x}-\real{\y})\relax
\the\temp
\end{document}
维度表达式最简单的写法是什么?
答案1
老实说,最简单的方法是使用 PGF 来计算。
\documentclass{article}
\usepackage[demo]{graphics}
\usepackage{pgf}
\newlength\unit
\unit=16pt
\def\x{0.5}
\def\y{0.3}
\def\s{0.8}
\newlength\temp
\begin{document}
\makeatletter
\pgfmathsetlength{\temp}{\unit/\s*(\x-\y)}
\the\temp
\includegraphics[width=\temp]{test}
\end{document}
如果将其传递给\includegraphics
,最好将其作为宏参数。
\def\putgraphic#1{%
\includegraphics[viewport=#1 10 20 20]{test.png}}
\putgraphic{\temp}
答案2
这是带有expl3
模块fp
的(不是可扩展版本):
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\fp_new:N \l_forgiver_factor_fp
\NewDocumentCommand{\xys}{ O{\funit} m m m }
{
\fp_set:Nn \l_forgiver_factor_fp { #2 }
\fp_sub:Nn \l_forgiver_factor_fp { #3 }
\fp_div:Nn \l_forgiver_factor_fp { #4 }
#1 = \fp_use:N \l_forgiver_factor_fp #1
}
\ExplSyntaxOff
\newlength\funit
\setlength\funit{16pt}
\begin{document}
\xys{3.125}{2.175}{2.5}\the\funit
\end{document}
这将输出
6.08008pt
符合要求echo "16*(3.125-2.175)/2.5" | bc -l
,实际上打印
6.08000000000000000000
您可以通过调用来设置其他长度
\xyz[\mylen]{<x>}{<y>}{<s>}