我如何插入两位数的年份字符串?
我知道该命令\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.