维度表达式最简单的写法是什么?

维度表达式最简单的写法是什么?

我想做以下算术:

(x-y)*unit/s其中x,,为有理常数,y为长度单位。sunit

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

enter image description here

如果将其传递给\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>}

相关内容