改进版本——显示 1 至 16383 之间的两位数表示

改进版本——显示 1 至 16383 之间的两位数表示

我如何插入两位数的年份字符串?

我知道该命令\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.

相关内容