![改进版本——显示 1 至 16383 之间的两位数表示](https://linux22.com/image/299355/%E6%94%B9%E8%BF%9B%E7%89%88%E6%9C%AC%E2%80%94%E2%80%94%E6%98%BE%E7%A4%BA%201%20%E8%87%B3%2016383%20%E4%B9%8B%E9%97%B4%E7%9A%84%E4%B8%A4%E4%BD%8D%E6%95%B0%E8%A1%A8%E7%A4%BA.png)
我如何插入两位数的年份字符串?
我知道该命令\the\year
会插入四位数的年份字符串。我尝试使用\twodigit\year
,但它也返回四位数。
我想我需要某种宏,但我不知道如何编写。我尝试过这样的方法:
\newcommand{\shortyear}[4]{
\def\@shortyear{#3#4}}
\shortyear[\the\year] % Empty string
但它返回空字符串。我们的想法是传递四位数字作为参数,然后只返回最后两位。
答案1
当然,用户有责任确保参数是/产生 4 位数字。
\documentclass{article}
\def\shortyear#1{\expandafter\shortyearhelper#1}
\def\shortyearhelper#1#2#3#4{#3#4}
\begin{document}
\shortyear{\the\year}\par
\shortyear{2036}
\end{document}
答案2
一个更简单的解决方案:
\documentclass{article}
\makeatletter
\newcommand*\short[1]{\expandafter\@gobbletwo\number\numexpr#1\relax}
\makeatother
\begin{document}
\short{\year}
\short{2014}
\end{document}
如果是数字参数,最好使用四位数字。
答案3
\MODULO
使用包中的命令的版本calculator
。但是,它不适用于太大的数字(以及太短的数字 ;-))
笔记:计算器包内部使用长度寄存器,其值限制为 0 到 16383,因此不要在 16383 之后的年份使用此代码;-)
\documentclass{article}
\usepackage{calculator}%
\usepackage{datetime}%
\newcommand{\shortyear}[1]{%
\gdef\ModuloResult{}%
\MODULO{\twodigit{#1}}{100}{\ModuloResult}%
\twodigit{\ModuloResult}%
}
\begin{document}
\shortyear{\year}%
\shortyear{1900}%
\end{document}%
改进版本——显示 1 至 16383 之间的两位数表示
\documentclass{article}
\usepackage{calculator}%
\usepackage{datetime}%
\usepackage{longtable}
\usepackage{forloop}%
\newcommand{\shortyear}[1]{%
\gdef\ModuloResult{}%
\MODULO{\twodigit{#1}}{100}{\ModuloResult}%
\twodigit{\ModuloResult}%
}
\newcounter{loopcounter}
\begin{document}
\begin{longtable}{ll}
Year & Short year \tabularnewline
\endfirsthead
\forloop{loopcounter}{1}{\number\value{loopcounter} < 16384}{%
\theloopcounter & \shortyear{\value{loopcounter}} \tabularnewline
}%
\end{longtable}
\end{document}
答案4
我为这个答案集合提供了另一种解决方案。不需要任何软件包,但可以使用 eTeX 原语。
\def\short#1{\ifnum\shortA{#1}<10 0\fi \number\shortA{#1}}
\def\shortA#1{\numexpr #1-((#1-50)/100)*100\relax}
\short\year; \short{9}; \short{1849}); \short{1989}; \short{123456}.
% 14; 09; 49; 89; 56.