中世纪罗马数字格式

中世纪罗马数字格式

我最近读到罗马数字的中世纪变体最后一个“i”字符被替换为“j”。我原本想自己编写\roman一些\Roman变体,但却碰壁了……有谁知道该怎么做吗?提前谢谢!

附言:我想把最后的“v”改为“y”;)

编辑:澄清问题,我会仅有的喜欢用罗马数字将最后的“i”和“v”分别替换为“j”和“y”。我对其他中世纪变体不感兴趣(至少目前不感兴趣 :P)。

答案1

这是一个开始,

\def\MiddleAgeRoman#1{%
    \ifcase#1 zero not allowed
    \or i\or ij\or iij\or iv\or v \or vi 
    \or vij \or viij \or ix\or x 
    \else Not available for #1\fi\relax}


    \MiddleAgeRoman{7}

将查看修改后的链接并尝试稍后获取更多代码。

还可以查看包裹http://www.ctan.org/tex-archive/macros/latex/contrib/modroman,它似乎能够做你想做的事。

答案2

\def\Middleage#1{%
  \ifnum#1>0
    \expandafter\Middleagei\romannumeral#1\expandafter\relax
  \else
    \errmessage{Invalid number}%
  \fi}
\def\Middleagei#1#2{%
  \ifx#2\relax
    \expandafter\Middleageii\expandafter#1%
  \else
    #1\expandafter\Middleagei\expandafter#2%
  \fi}
\def\Middleageii#1{%
  \expandafter\if\string i#1%
    j%
  \else
    #1%
  \fi}

\Middleage{100}

\Middleage{128}

\Middleage{41}

我们从 的扩展中读取两个标记\romannumeral#1\relax;如果第二个标记是\relax,那么我们就到末尾了;所以我们必须确定罗马数字的最后一个标记是否是i;如果是,我们打印j,否则打印字符。

使用它来表示 LaTeX 中的计数器

也添加到上面的代码中

\makeatletter
\def\MAroman#1{\expandafter\@MAroman\csname c@#1\endcsname}
\def\@MAroman#1{\expandafter\Middleage\expandafter{\number#1}}
\makeatother

现在

\pagenumbering{MAroman}
\newcounter{mycount}
\renewcommand{\themycount}{\MAroman{mycount}}

将按预期工作。

不同版本

以下版本将打印“i”、“ij”、“iij”、“iv”、“v”、“vi”、“vij”等等(只有在“i”之前,最后的“i”才会变成“j”)。

\makeatletter
\def\Middleage#1{\expandafter\@middleage\expandafter{\number#1}}
\def\@middleage#1{%
  \ifnum#1>\z@
    \expandafter\@middle@ge\romannumeral#1\expandafter @\expandafter @%
  \else
    \errmessage{Invalid number}%
  \fi}
\def\@middle@ge#1#2#3{%
  \if#2@%
    #1%
  \else
    \expandafter\@middl@@ge\expandafter#1\expandafter#2\expandafter#3%
  \fi}
\def\@middl@@ge#1#2#3{%
  \if#3@%
    \expandafter\@m@ddl@@ge\expandafter#1\expandafter#2%
  \else
    #1\expandafter\@middle@ge\expandafter#2\expandafter#3%
  \fi}
\def\@m@ddl@@ge#1#2{%
  \expandafter\if\string i#2%
    \expandafter\if\string i#1%
      ij%
    \else
      #1#2%
    \fi
    \expandafter\@gobble
  \else
    #1#2\expandafter\@gobble
  \fi}
\makeatother

相关内容