你这个问题问得不清楚。
长度
理解成字符的宽度。ex
这个长度单位最初在定义的时候并不是字符 x
的宽度,而是字符 x
的高度。所以一个汉字的长度相当于几个ex
和 一个汉字的长度相当于几个 x 的长度
并不是同一个答案。em
、ex
这两个单位最初定义时确实是当前字体字号下 M
字符的宽度和 x
字符的高度,但现在通常是在字体文件里指定这两个相对长度的精确值,当然,它们会随字号大小而改变。ctex
宏集中,em
这个单位长度被定义为和一个汉字字符等宽,即\ziju
为0时,1em
= \ccwd
,这个长度和 M
的宽度还是有一定的差别的。这几个长度单位数值可以通过 \printlen
宏包换算显示出来。下面的例子文件给出了这几个长度的数值。x
字符的高度我一时想不起什么方式来获得了,用了个比较傻的方法。
\documentclass{ctexart}
\usepackage{printlen,graphicx}
\uselengthunit{bp}
\newlength\widthofx
\newlength\heightofx
\newlength\widthofM
\settowidth\widthofx{x}
\settowidth\heightofx{\rotatebox{90}{x}}
\settowidth\widthofM{M}
\begin{document}
\begin{tabular}{l|r}
\hline
1em & \printlength{1em} \\
\hline
1ex & \printlength{1ex} \\
\hline
ccwd & \printlength{\ccwd} \\
\hline
width of x & \printlength{\widthofx} \\
\hline
height of x & \printlength{\heightofx} \\
\hline
width of M & \printlength{\widthofM} \\
\hline
\end{tabular}
\end{document}
\documentclass{ctexart}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\begin{document}
\ExplSyntaxOn
\fp_eval:n {\dim_ratio:nn {\ccwd}{1ex}}\par
\fp_eval:n {\dim_ratio:nn {1ex}{1pt}}\par
\fp_eval:n {\dim_ratio:nn {1em}{1pt}}\par
\fp_eval:n {\dim_ratio:nn {1cm}{1pt}}\par
\ExplSyntaxOff
\end{document}