逐字和 CJK

逐字和 CJK

我不熟悉中文字符和字体。但我必须在文档中输入一些字符。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}

我有两个问题:

  1. verbatim是否有适合在与拉丁字符大小相同的环境中使用的中文等宽字体(我使用的是 MacTeX/TeXLive 2012)?
  2. 为什么生成的 PDF 中不是全部 7 个中文符号?

pdflatex 的结果

答案1

MWE 的输出

  1. ASCII 字符ABC...通常排版为一半的宽度字符,而中文字符(汉字, ABC...)排版为全屏宽度字符。另请参阅半角和全角形式

    因此,解决方案是将 ASCII 字符转换为 Unicode 中的全角字符。您可以编写自己的转换器或使用类似http://kiserai.net/hwfw.pl

  2. 汉字有繁体和简体两种书写系统,其中属于繁体字,其他 可以在两种系统中使用。但繁体字和简体字之间并没有一一对应的关系,多个繁体字可以对应到一个简体字上。

    因此,在使用CJK环境时,您还需要决定使用哪种书写系统,即使用哪种字体:gbsngkai是简体字的字体,而bsmibkai是繁体字的字体。另请参阅繁体字和简体字的问题CJK环境与中文

以下是上图的代码:

\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{bsmi}
中華人民共和國

ABC-1234
\begin{verbatim}
中華人民共和國
ABC-123
\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}

在此处输入图片描述

相关内容