黑圈数字符号0到50复制_[LaTeX 中文使用] 使用「数字形式」的罗马数字

本文已加入专栏文章目录,归入「进阶使用」文章系列。

背景信息

  • 阿拉伯数字:1,2,3,4,5,6,7,8,9,10,11,12
    (由数字符号 0,1,2,3,4,5,6,7,8,9 构成)
  • 小写罗马数字:i,ii,iii,iv,v,vi,vii,viii,ix,x,xi,xii
    (由小写字母符号 i,v,x,l,c,d,m 构成,某些记法下还会在字母顶部添加横线)
  • 大写罗马数字:I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII
    (由大写字母符号 I,V,X,L,C,D,M 构成)

Unicode 还把前 12 个罗马数字单独收录为了符号,大小写共 24 个,位于「数字形式」区段(Number Forms Block)。一种区分方式:比较 xii 和 ⅻ,前者是三个符号可以依次选中,后者是「数字形式的」单个符号只能整体选中。

  • UTF-8 Browser Test for Unicode Block 'Number Forms' | fileformat.info

中文场景下的使用

正常情况下,罗马数字直接使用西文字母拼出来就行,例如 4 就是 iv(i + v 两个字母)。中文字体通常也收录了「数字形式」的前 10 个罗马数字(有的字体收全了 12 个),并且把它们定义成了(占据空间)和汉字宽度相当的形式 [注]。一些用户喜欢这种形式,觉得比较紧凑。

但不能认为以中文字体输出的「数字形式」罗马数字,是唯一正确的罗马数字输出效果。直接用西文字母拼出来的,在西文场景中用得更多。

[注:这里故意避免了使用「全角」一词。]

在 LaTeX 里的使用

输入端

  1. 作为内容手动输入,直接插入相应符号即可。可以从网页、Word 文件复制,也可以从输入法的特殊符号表里点选插入。
  2. 作为计数器的输出形式。

输出端

  1. 找一个合适的字体,通常为中文字体
  2. 让 LaTeX 用中文字体,而非西文字体输出相应符号

以下的例子,定义了新计数器输出形式命令 romanCnRomanCn,并配置了 xeCJK 中文方案下的字体。

documentclass{ctexart}
usepackage{pgffor}

xeCJKDeclareCharClass{CJK}{`ⅰ -> `ⅻ, `Ⅰ -> `Ⅻ}

makeatletter
% chars in unicode block "number forms"
% https://www.fileformat.info/info/unicode/block/number_forms/utf8test.htm
newcommand{romanCn}[1]{%
  expandafter@romanCncsname c@#1endcsname
}

def@romanCn#1{%
  ifcase#1relax
  or ⅰor ⅱor ⅲor ⅳor ⅴor ⅵor ⅶor ⅷor ⅸor ⅹor ⅺor ⅻ%
  else
    @roman#1%
  fi
}

newcommand{RomanCn}[1]{%
  expandafter@RomanCncsname c@#1endcsname
}

def@RomanCn#1{%
  ifcase#1relax
  or Ⅰ or Ⅱor Ⅲor Ⅳor Ⅴor Ⅵor Ⅶor Ⅷor Ⅸor Ⅹor Ⅺor Ⅻ%
  else
    @Roman#1%
  fi
}
makeatother

begin{document}

newcounter{xcnt}
foreach i in {romanCn, RomanCn} {%
  setcounter{xcnt}{0}%
  foreach j in {1, ..., 12} {%
    stepcounter{xcnt}%
    i{xcnt},
  }
  par
}
end{document}

298c4dd729f675c13bcfb8d7588524ed.png

附注:

  • 可以看到,这个字体没有提供符号 ⅺ 和 ⅻ。
  • 与 LaTeX 提供的其他计数器输出命令保持一致,romanCnRomanCn 都是可展开的(expandable)
  • 因为中文字体把「数字形式」的罗马数字定义成了(占据空间)和汉字宽度相当的形式,所以这些符号的左右侧自带空距,一般不适合在它们之后紧跟标点:

2c6b54cbf63e00961341b519a537aaf6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值