![逐字和 CJK](https://linux22.com/image/266542/%E9%80%90%E5%AD%97%E5%92%8C%20CJK.png)
我不熟悉中文字符和字体。但我必须在文档中输入一些字符。XeLaTeX
可能是一种选择,但我正在寻找解决方案pdflatex
。这是我在其他问题和答案的帮助下创建的 MWE:
\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{gbsn}
中華人民共和國
ABC-1234
\begin{verbatim}
中華人民共和國
ABC-1234
\end{verbatim}
\end{CJK*}
\end{document}
我有两个问题:
verbatim
是否有适合在与拉丁字符大小相同的环境中使用的中文等宽字体(我使用的是 MacTeX/TeXLive 2012)?- 为什么生成的 PDF 中不是全部 7 个中文符号?
答案1
ASCII 字符
ABC...
通常排版为一半的宽度字符,而中文字符(汉字, ABC...
)排版为全屏宽度字符。另请参阅半角和全角形式。因此,解决方案是将 ASCII 字符转换为 Unicode 中的全角字符。您可以编写自己的转换器或使用类似http://kiserai.net/hwfw.pl
汉字有繁体和简体两种书写系统,其中
華
和國
属于繁体字,其他 可以在两种系统中使用。但繁体字和简体字之间并没有一一对应的关系,多个繁体字可以对应到一个简体字上。因此,在使用
CJK
环境时,您还需要决定使用哪种书写系统,即使用哪种字体:gbsn
和gkai
是简体字的字体,而bsmi
和bkai
是繁体字的字体。另请参阅繁体字和简体字的问题 和CJK
环境与中文
以下是上图的代码:
\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{bsmi}
中華人民共和國
ABC-1234
\begin{verbatim}
中華人民共和國
ABC-123
4
\end{verbatim}
\end{CJK}
\end{document}
答案2
这使得所有 ASCII 字符的宽度都为正常宽度的两倍,我认为这会使它们完全对齐,但似乎略有偏差,另一种方法是用2\noexpand\width
固定宽度替换,并预先计算为逐字字体中 CJK 字符的宽度。如果有重音字符或其他超出 ASCII 范围的半宽字符,则无法按书写方式工作。
\documentclass{article}
\usepackage{CJKutf8}
\usepackage{verbatim}
\makeatletter
\def\verbatim@processline{%
\edef\tmp{\expandafter\cjkpad\the\verbatim@line\relax}
\tmp}
\def\cjkpad#1{%
\ifx\relax#1\par
\else
\ifnum\expandafter`\noexpand#1<128 %
\noexpand\makebox[2\noexpand\width]{\noexpand#1}%
\else
\noexpand#1%
\fi
\expandafter\cjkpad
\fi}
\makeatother
\begin{document}
\begin{CJK*}{UTF8}{bsmi}
\makeatletter
中華人民共和國
ABC-1234
\begin{verbatim}
中華人民共和國
ABC-1234
\end{verbatim}
\end{CJK*}
\end{document}
答案3
% UTF-8 encoding
% Compile with XeLaTeX
\documentclass{article}
\usepackage{xeCJK}
% Specify a Chinese font that contains all characters you need.
\setCJKmainfont{SimSun}
\begin{document}
中華人民共和國
ABC-1234
A fullwidth character is twice as wide as a halfwidth character:
\begin{verbatim}
|中華人民共和國|
|ABC-1234......|
\end{verbatim}
\end{document}