我想计算一些数字,主要用于一些布局。但是,我被困在了这一点上,因为似乎你不能在 latex 中写这样的内容:
\newcommand{\MyNewWidthValueA}{{0.6666 + 0.075} \textwidth}
\newcommand{\MyNewWidthValueB}{\MyNewWidthValueA + 2cm}
有没有办法做这些非常基本的事情?我认为这是一个非常标准的函数,应该可以工作,因为我需要它来定义某些特定布局的框架和框的位置。
答案1
Latex 无法直接处理表达式或计算。我远非专家,但我相信有办法实现你想要的。
您可以将数字保留为尺寸并用于\dimexpr
计算:例如,\the\dimexpr12pt + 13.5pt
得到 25.5pt。这在宏和新长度名称中都有效。在这种情况下,\the
如果您想提取和打印尺寸,则使用。
您还可以直接在 内部计算表达式\fpeval{<expression>}
,它返回一个数字(不带单位),可以访问数学函数,并允许格式化结果、进行舍入(需要xfp
2022/01/06 之前的包)
类似于\fpeval{}
,pgfmath
包添加了以下宏(以及许多其他宏):\pgfmathparse{expression}
和\pgfmathresult
。后者返回 解析的最后一个表达式\pgfmathparse{}
。
最后,calc
但是我对此的经验最少。
以下是根据您的代码的一个示例:
\documentclass{article}
\usepackage{pgfmath}
% \usepackage{xfp} % Required before 2022/01/06 of latex
\newlength{\MyNewWidthValueA}
\newlength{\MyNewWidthValueB}
\setlength{\MyNewWidthValueA}{\dimexpr0.6666\textwidth + 0.075\textwidth}
\setlength{\MyNewWidthValueB}{\dimexpr\MyNewWidthValueA+2cm}
\newcommand{\Vala}{\dimexpr0.6666\textwidth + 0.075\textwidth}
\newcommand{\Valb}{\dimexpr\MyNewWidthValueA + 2cm}
\begin{document}
\the\dimexpr12pt +13.5pt
Length names:
\the\MyNewWidthValueA, \the\MyNewWidthValueB
\bigskip
Macros expanding to lengths:
\the\Vala, \the\Valb
\bigskip
A macro to print a formatted result from an expression:
\fpeval{round((0.6666 + 0.075)\textwidth,1)}
\end{document}
答案2
您可以使用\fpeval
。
\documentclass{article}
\newcommand{\MyNewWidthValueA}{}
\newcommand{\MyNewWidthValueB}{}
\begin{document}
\edef\MyNewWidthValueA{\fpeval{(0.6666 + 0.075)*\textwidth}pt}
\MyNewWidthValueA
\edef\MyNewWidthValueB{\fpeval{\MyNewWidthValueA+2cm}pt}
\MyNewWidthValueB
\end{document}
你可能想做
\fpeval{round(<expression>,5)}
但是如果您使用许多十进制数字,TeX 就不会介意并且会忽略多余的数字。