答案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}