如何在 Latex 中进行数学运算?

如何在 Latex 中进行数学运算?

我需要一个命令将公历年转换为贾拉利历年,转换公式很简单,如下所示:

在此处输入图片描述

我想创建一个命令来自动将公历年份转换为贾拉利年份,我该怎么做?

答案1

如果不需要使用计数器,那么\the\numexpr#1-621(在宏中)可能是进行整数数学运算的最简单方法,并且如果结果需要用于进一步的计算,它是可扩展的:

\numexpr#1-621使用第一个参数并621从该值中减去(希望它是一个整数)。

\the\numexpr...保证了该代码的可扩展性。

\numexpr需要e-TeX功能,但在拥有这些扩展近 20 年后,这应该没有任何限制e-TeX......)

\documentclass{article}

\newcommand*{\cnvt}[1]{\the\numexpr#1-621\relax}

\begin{document}
\cnvt{2016}

\edef\cnvtresult{\cnvt{2016}}% Store the result if precisely this value is needed
\cnvtresult

\end{document}

两次都1395打印出来。

更新--添加了基于计数器的版本:

\documentclass{article}
\usepackage{multicol}

\newcounter{jalaliyear}
\newcommand*{\cnvt}[1]{\the\numexpr#1-621\relax}

\newcommand{\cnvtother}[1]{%
  \setcounter{jalaliyear}{#1}%
  \addtocounter{jalaliyear}{-621}%
}
\newcounter{loopcntr}

\begin{document}
\parindent=0em
Version without counter: \cnvt{2016}

\edef\cnvtresult{\cnvt{2016}}
And once again: \cnvtresult

\cnvtother{2016}Now the counter version: the jalali year corresponding to 2016 is \thejalaliyear%

Now a nice loop -- code golfing ;-)

\begin{multicols}{6}
\tiny
\setcounter{loopcntr}{620}
\loop\ifnum \value{loopcntr} < 2017\relax
\stepcounter{loopcntr}%
\theloopcntr\hfill\cnvt{\value{loopcntr}}

\repeat
\end{multicols}
\end{document}

在此处输入图片描述

相关内容