我需要在文档中输入汉字,并且需要将首行的缩进设置为当前字体宽度的2倍才能符合中文的习惯,而汉字的宽度不是1em
一定1ex
的。
于是我尝试使用 LaTeX2e 命令\f@size
来获取当前字体的宽度。我使用\setlength{\parindent}{\f@size \p@}
,它在缩进仅为当前字体宽度的 1 倍时运行良好。但是,当我设置 时\setlength{\parindent}{2\f@size \p@}
,缩进变得太大,就像下图一样:
另外,我尝试使用该\dimeval{}
命令,但它也没有按预期工作。MWE 是
\documentclass{article}
\usepackage{indentfirst,zhlipsum,xeCJK}
\makeatletter
\setlength{\parindent}{\dimeval{2\f@size \p@}}
\makeatother
\begin{document}
\zhlipsum[6]
\end{document}
答案1
请注意,尽管名字是 1em,但 1em 是不是恰好是大多数字体中大写字母 M 的宽度。相反,它是当前字体的大小。因此,无论字体或字体大小如何,1em 的间距始终与字体高度相同,从而形成正方形间距。由于 CJK 字符通常设计为适合正方形,因此它们的宽度为 1em。
因此,您要寻找的只是\setlength{\parindent}{2em}
:
\documentclass{article}
\usepackage{indentfirst, zhlipsum, xeCJK}
\setlength{\parindent}{2em}
\begin{document}
\zhlipsum[6]
口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口
\end{document}
在排版对齐文本时,可能会出现一些偏移。这意味着字符会稍微扩展以完全适合行内。此外,您可以看到,标点符号行末的空白会进行调整。这也会导致行中单个字符的位置发生微小偏移。但尽管如此,CJK 段落缩进的正确印刷宽度为 2em。
除了为什么你的方法不起作用的问题之外,还请参阅此问答。您可以只测试解析维度的输出:
\documentclass{article}
\usepackage{indentfirst,zhlipsum,xeCJK}
\makeatletter
\setlength{\parindent}{\dimeval{2\f@size \p@}}
\makeatother
\begin{document}
\the\parindent
\end{document}
结果是 210pt,这显然不是预期的结果。但是,你可以这样做:
\documentclass{article}
\usepackage{indentfirst,zhlipsum,xeCJK}
\makeatletter
\setlength{\parindent}{\dimeval{\f@size \p@ * 2}}
\makeatother
\begin{document}
\the\parindent
\end{document}
结果是 20pt,在本例中,它与 2em(两个字符的宽度)相同。
答案2
通常情况下,您只需使用2em
来设置即可\parindent
。但是,如果您出于某种原因想要更改\CJKglue
(CJK 字符之间的粘合),则最好使用bundle\ccwd
中的ctex
,因为它会将粘合考虑在内。
对于 pdftex 和 xetex 来说,的定义\ccwd
是
\box_new:N \l_ctex_tmp_box
\hbox_set:Nn \l_ctex_tmp_box { \CJKglue }
\dim_new:N \ccwd
\dim_set:Nn \ccwd { \box_wd:N \l_ctex_tmp_box + \f@size \p@ }
并测试以下例子:
\documentclass{article}
\usepackage{indentfirst,zhlipsum,xeCJK}
\xeCJKsetup{CJKglue = {\hskip 4pt plus 0.08\baselineskip}}
\makeatletter
\ExplSyntaxOn
\box_new:N \l_ctex_tmp_box
\hbox_set:Nn \l_ctex_tmp_box { \CJKglue }
\dim_new:N \ccwd
\dim_set:Nn \ccwd { \box_wd:N \l_ctex_tmp_box + \f@size \p@ }
\ExplSyntaxOff
\setlength{\parindent}{2\ccwd}
\makeatother
\begin{document}
\zhlipsum[6]
\end{document}
如果替换2\ccwd
为2em
,效果是
如上所示,第一行的第一个 CJK 字符与第二行的第三个 CJK 字符没有对齐。