我最近读到罗马数字的中世纪变体最后一个“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