我有一个相对频繁重复的家庭作业问题,并且我正在尝试更新解决方案以适应动态。
假设z(t)
是一个周期为 3 的周期函数。求值z(\the\year)
。
\begin{array}{c||c|c|c|c|c|c}
t &0 & 1 & 2 & 3 & \dotsb & \the\year\\
\hline
z(t) &12 & 5\pi & -6 & 12 & \dotsb & ??
\end{array}
是否有任何巧妙的编码可用于自动计算\the\year
mod3 和\ifthenelse
结果?
答案1
如果您乐意输出-1
而不是2
,那么您可以使用 TeX 原语。
\documentclass{article}
\newcommand\modcomp[2]{\the\numexpr #1 - (#1/#2)*#2\relax}
\begin{document}
10 mod 3 is \modcomp{10}{3}. 11 mod 3 is \modcomp{11}{3}.
\the\year\ mod 7 is \modcomp{\the\year}{7}
\end{document}
如果你坚持非负输出,TeX 基元\divide ... by
会截断而不是舍入,因此你可以这样做
\documentclass{article}
\newcount\b
\newcount\n
\newcommand\modcomp[2]{\n=#1 \b=#2 \divide\n by \b \multiply\n by \b \the\numexpr#1 - \number\n\relax}
\begin{document}
10 mod 3 is \modcomp{10}{3}. 11 mod 3 is \modcomp{11}{3}.
\the\year\ mod 7 is \modcomp{\the\year}{7}
\end{document}
答案2
如果您愿意并且能够使用 LuaLaTeX(而不是 pdfLaTeX 或 XeLaTeX),您可以对 执行模除法\the\year
。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for '\luaexec' macro
% helper macro '\modulo' invokes Lua to perform the actual job
\newcommand\modulo[2]{\luaexec{tex.sprint(#1 \% #2)}}
\begin{document}
\the\year, \modulo{\the\year}{3}
\end{document}