「インフォシーク isweb ライト」サービス終了に伴い、 本サイトは以下のURLに移転することになりました。
現在のサイトは、10月末を以て終了となります。
http://zrbabbler.sp.land.to/unichar.html

Unicode による文字の入力

(stub)
重要: このページで配布している一部の zip ファイルについて、 サブディレクトリにあるべきファイルが欠落しているという 誤りがあったので、正しいものに置き換えました。 [2008/06/25]

概要

この文書で扱う事項は、

  • 欧文 LaTeX2e / pLaTeX2e / upLaTeX2e、すなわち 「欧文の Unicode 処理をもたない TeX 処理系」の上での LaTeX において (つまり元から全てを Unicode で扱う Omega、LuaTeX、XeTeX ではない)
  • 「コード値による入力」および「UTF-8 による直接入力」 によって
  • 「欧文」および「和文」の Unicode 文字を出力する (もちろん欧文 LaTeX は欧文のみ)

統一したインタフェースの解説である。

ここでは、場合に応じて、 次のようなパッケージ・拡張機能を利用する。

使用する「部品」

bxutf8 入力エンコーディング : UTF-8 入力

UTF-8 入力の為の LaTeX 標準の入力エンコーディングオプション utf8 を拡張したもので、utf8 自身がその文字を扱えない場合に、 ある内部形式に変換してそれを他のパッケージ (bxbase 等)が処理できるようにする。

bxbase パッケージ : Unicode コード値による入力

bxbase パッケージを読み込むと、 次に挙げる Unicode のコード値による入力命令が 使えるようになる。

  • \Ux{‹コード値16進›,...}:欧文用
  • \UI{‹コード値16進›,...}:和文用

どちらも、入力する文字のコード値を 16 進で書き、 コンマで区切ることで複数文字の入力が可能である。 文字の出力には、次の順で最初に利用可能な機能を利用する。

  1. bxucs パッケージによる欧文 Unicode 文字出力機能。 (\Ux のみ)
  2. upTeX のネイティブな和文 Unicode 文字出力機能。
  3. OTF パッケージ(または UTF パッケージ) の和文 Unicode 文字出力機能。

同時に、このパッケージでは、bxutf8 から渡された内部表現を \Ux と同様に処理する。

参考: PXbase バンドルの pxbase パッケージも同じ機能を提供するので bxbase の代わりに使える。 ここでは BXbase バンドルを必要とすることが多いので bxbase を使って解説する。

bxucs パッケージ : 欧文 Unicode 文字出力

Unicode subfont を用いて、 欧文 Unicode 文字を出力する機能を提供する。 このパッケージ自体はユーザ命令を持たず、 bxbase パッケージの \Ux 命令が 本パッケージの機能を利用する。

要するに

まとめると次のようになる。

  • bxbase(pxbase) + bxucs : \Ux のコード値入力で欧文 Unicode 文字出力が可能。
  • bxbase(pxbase) + OTF(UTF) : \UI のコード値入力で和文 Unicode 文字出力が可能。
  • 上の各々について bxutf8 を併用 : UTF-8 での直接の文字入力が可能。
  • bxbase(pxbase) + upLaTeX : \UI のコード値入力で和文 Unicode 文字出力が可能。
    (upLaTeX なので和文の直接入力は元々可能である。)
  • もちろん全部併用することも可能。 併用時の注意については後の節を参照。

なお、「utf8x 入力エンコーディング(unicode パッケージ) の機能と併用したい」という場合は、 bxutf8 の代わりに bxutf8x (同じく BXbase バンドルに含まれる)を使うことが考えられる (ただしこちらは制限が多い)。 後の bxutf8x に関する解説を参照されたい。

サンプル

欧文の場合

はっきりいって bxucs を使えるようにする為の設定 (パッケージ内の説明書に述べている)は、 LaTeX2e の NFSS や TeX システムでのフォントの扱いに関する知識が 必要でかなり難しい。 後で、「TrueType / OpenType フォントを dvipdfmx で使う」 ことに限定した解説をする(予定である)が、 それでも難しい。 そこで、ここではサンプルを試す目的で、 SIL International が提供するフリー(OFL ライセンス)の Unicode フォントを bxucs で使う為のデータをまとめて置いておくことにする。

  • silfonts.zip [2008/06/25]
    Charis SIL, Doulos SIL, Gentium の為のデータ。 texmf の中身を TEXMF ツリーのいずれかにコピーする。 その後、dvipdfmx の設定ファイル ($TEXMF/dvipdfm/config/dvipdfmx.cfg)に 「f SILfonts.map」を追記する。 (SILfonts.map は dvipdfmx 用の設定ファイルなので updmap は使えない。)
  • abyssinica.zip [2008/06/25]
    Abyssinica SIL(エチオピア文字のフォント)の為のデータ。 アムハラ語の例を試してみたい人は必要。 導入方法は上と同じ。設定ファイルは abyssinica.map。
  • funinst-sfd.zip [2008/06/25]
    上の 2 つを使う時に、併せて導入する必要がある。 texmf の中身を TEXMF ツリーのいずれかにコピーする。
  • SIL のフォントのダウンロード
    W32TeX でフォントを使えるようにする手っ取り早い方法は、 そのフォントを Windows のシステムにインストールすることである。

このデータの中に「USF」というフォントエンコーディングの為の フォント定義ファイル(usfcharis.fd 等)がある。 USF エンコーディングが設定されているフォントファミリに対して bxucs の機能が有効となり、\Ux によるコード値入力でそのフォントにある文字が利用できる。 さらに bxutf8 を併用すると UTF-8 での直接入力ができる。

% このファイルの文字コードは UTF-8 (BOM なし)
\documentclass[a4paper]{article}
\usepackage[bxutf8]{inputenc}  % bxutf8 と
\usepackage{bxucs}             %   bxucs を読み込む
\usepackage[T1]{fontenc}
\renewcommand{\rmdefault}{charis} % 既定のファミリを charis に
\begin{document}
This document contains:
\begin{itemize}
\item English
\item \textit{Français}     % これは T1 で出力のはず 
\item Русский язык
\item \textit{Қазақша}      % イタリックにしてみる
      % ギリシャ文字は gentium で
\item {\fontfamily{gentium}\selectfont Ελληνικά}
\item \textbf{Tiếng Việt}   % ボールドに
\item Az\Ux{259}rbaycanca   % \Ux の使用例。U+0259 は 'ə'
\end{itemize}
\end{document}

ラテン・キリル・ギリシャ文字以外の用字系を扱う例として、 エチオピア文字(ゲーズ文字)フォント Abyssinica SIL によるアムハラ語の文章の組版を示す。

% This file is encoded in UTF-8 without BOM.
\documentclass[a4paper]{article}
\usepackage[bxutf8]{inputenc}
\usepackage{bxucs}
\begin{document}
\section*{``The Tower of Babel'' in Amharic}
\begin{flushright}
From \textit{Omniglot}
(http://www.omniglot.com/babel/amharic.htm)
\end{flushright}
  % Select family 'abyss' locally for which USF is available.
\begin{sloppypar}\large\fontfamily{abyss}\selectfont
\begin{itemize}
\item[፩፤] ምድርም ሁሉ በአንድ ቋንቋና በአንድ ንግግር ነበረች።
\item[፪፤] ከምሥራቅም ተነሥተው በሄዱ ጊዜ በሰናዖር ምድር አንድ ሜዳ አገኙ፤
በዚያም ተቀመጡ።
\item[፫፤] እርስ በርሳቸውም። ኑ፥ ጡብ እንሥራ፥ በእሳትም እንተኵሰው ተባባሉ።
ጡቡም እንደ ድንጋይ ሆነላቸው፤ የምድርም ዝፋት እንደ ጭቃ ሆነችላቸው።
\item[፬፤] እንዲህም። ኑ ለእኛ ከተማና ራሱ ወደ ሰማይ የሚደርስ ግንብ እንሥራ፤
በምድር ላይ ሳንበተንም ስማችንን እናስጠራው አሉ።
\item[፭፤] እግዚአብሔርም የአዳም ልጆች የሠሩትን ከተማና ግንብ ለማየት ወረደ።
\item[፮፤] እግዚአብሔርም አለ። እነሆ፥ እነርሱ አንድ ወገን ናቸው፥ ለሁሉም
አንድ ቋንቋ አላቸው፤ ይህንም ለማድረግ ጀመሩ፤ አሁንም ያሰቡትን ሁሉ ለመሥራት
አይከለከሉም።
\item[፯፤] ኑ፥ እንውረድ፤ አንዱ የአንዱን ነገር እንዳይሰማው ቋንቋቸውን በዚያ
እንደባልቀው።
\item[፰፤] እግዚአብሔርም ከዚያ በምድር ሁሉ ላይ በተናቸው፤ ከተማይቱንም
መሥራት ተዉ።
\item[፱፤] ስለዚህም ስምዋ ባቢሎን ተባለ፥ እግዚአብሔር በዚያ የምድርን ቋንቋ
ሁሉ ደባልቋልና፤ ከዚያም እግዚአብሔር በምድር ሁሉ ላይ እነርሱን በትኖአቸዋል።
\end{itemize}
\end{sloppypar}
\end{document}

参考: 後述の通り、 アムハラ語の部分は分綴ができないので、overfull を防ぐために sloppypar 環境に入れている。

言語や用字系ごとの設定が不要で、便利なように見えるが、 以下のように制限が多く、使用範囲が限られていることにも注意されたい。 一般に、LaTeX の提供する他の方法では扱えない (あるいは何らかの理由で他の方法を採らない)文字について、 「何とかして文字の出力だけでもしたい」(言語的処理は度外視) という場合の方法だと考えるべきである。

  • BMP 内の文字(コード値 U+10000 未満)しか扱えない。
  • 文字合成(アクセントを付ける等)ができない。 LaTeX のアクセント命令を用いても、Unicode の結合文字を用いても 正しい表示にならない。
  • リガチャや他のグリフ置換についてフォントが持つデータを使用しない。 カーニングも無効である。
  • utf8x 入力エンコーディングと併用できない。 (これについては、後の bxutf8x に関する解説も参照。)

なお、bxucs を pLaTeX / upLaTeX で使用する場合は、 和文 Unicode と併用する場合と同じ注意が 必要となるので、そちらの説明も参照されたい。

参考: 現在有効なフォントエンコーディングのいずれかに含まれる文字については、 utf8 入力エンコーディングと全く同じ処理になるということにも 注意する必要がある。 例えば、この小節の最初の例で、fontenc の読込が

\usepackage[T2A,T1]{fontenc}

だとすると、T2A にあるキリル文字の Р は \CYRR に置き換えられる。 これは現在のフォントエンコーディングが T1 である時はエラーになる。

和文の場合

pLaTeX の場合

bxutf8 + bxbase + OTF の組み合わせで、UTF-8 で入力した JIS X 0208 外の和文文字を出力できる。 (内部で \UTF 命令に置き換えている。) \UI によるコード値入力も可能である (\UTF を直接使うのと大差ないが)。 ここでも、OTF パッケージが BMP にしか対応していない為、 使える文字は BMP に限られる。

% このファイルの文字コードは UTF-8
% platex に -kanji=utf8 が必要
\documentclass{jarticle}
\usepackage[bxutf8]{inputenc}
\usepackage{bxbase}
\usepackage{otf}
\begin{document}
世界最大のソフトウェア企業であるマイクロソフトの創業者の一人で
現在会長職を務めている人は誰か。
\begin{itemize}
\item[㋐] 森鷗外
\item[㋑] 内田百閒
\item[㋒] 鄧小平
\item[㋓] 李承燁
\item[㋔] ウィリアム・ヘンリー・ゲイツⅢ世
\item[㋕] \UI{5721}屋さん
\end{itemize}
\end{document}

韓国語・中国語が混在する場合は、OTF パッケージに multi を指定した上で、 Babel と pxbabel パッケージ(PXbase バンドル) (v0.2b 以降)を追加する。 pxbabel の使用法については、 PXbase バンドルのページの解説 を参照されたい。 pxbabel は OTF が multi 付きで読み込まれている場合は、 CJK 言語が有効な時に \UTF\UTFK 等に置き換える。 bxbase は \UTF を呼び出すので、 結果的に適切なフォントが呼び出されるという仕組みである。 ただし、JIS X 0208 の文字については、そもそも bxutf8 の方に処理が回らず pTeX 自身が処理するので、 必ず日本語のフォントになってしまうという制限がある (\UI によるコード値入力ならば大丈夫である)。

% このファイルの文字コードは UTF-8
% platex に -kanji=utf8 が必要
\documentclass{jarticle}
\usepackage[bxutf8]{inputenc}
\usepackage{bxbase}
\usepackage[multi]{otf}
\usepackage[english]{babel}
\usepackage[main=japanese]{pxbabel}
\begin{document}
世界最大のソフトウェア企業であるマイクロソフトの創業者の一人で
現在会長職を務めている人は誰か。
\begin{itemize}
\item[㋐] 森鷗外
\item[㋑] \foreignlanguage{schinese}{邓小平} %「小平」は日本語フォント
\item[㋒] \foreignlanguage{korean}{이승엽}   %      になる
\item[㋓] William Henry Gates III
\item[㋔] ところで㋓の人は誰?
\end{itemize}
\end{document}
参考: 中国語のフォント(字体)に 関する問題を解消する方法として PXfltsrc パッケージを 使うものがある。

upLaTeX の場合

upLaTeX はそもそも和文を Unicode で直接扱えるようにしたものなので、 和文だけならば bxutf8 は不要である。 bxbase の提供する \UI 命令は upLaTeX でも使える。 upTeX は BMP 外の文字も扱えるので、\UI で 10000(16進) 以上の値の指定も可能である。 詳しくは「upLaTeX を使おう」を参照。

参考: 本当は和文扱いしたい文字を pxcjkcat で故意に「欧文扱い」にして bxutf8 で拾わせて、 それを \UI の扱いで結局和文として出力するということは 一応可能である。 そうする必要はほとんどないと思われるが、 例えば次のような使い方ができる。

% uplatex を使用する
\documentclass[a4paper]{ujarticle}
%% 全角空白を書くと酷い目にあう設定 ;-)
\usepackage[bxutf8]{inputenc}
\usepackage{bxbase}
\usepackage{pxcjkcat}
\newcommand*{\unbelError}{\GenericError{}%
  {! ! ! ! ! SOME UNBELIEVABLE THINGS HAPPENED ! ! ! ! ! !}%
  {I'd rather like to ask severely for hours why you wrote it.}%
  {No idea how come this happened at all! Don't ask me!}}
\DeclareUnicodeCharacter{3000}{\unbelError  % U+3000 = 全角空白
  \makebox[1zw]{\Huge\raisebox{-.3zw}{■}}}
\cjkcategory{cjk04}{noncjk} % U+3000 を含むブロックを欧文扱い
\begin{document}
 これはテフのテストです。合ってるかな?
\end{document}

併用する場合

欧文と和文の Unicode 処理は併用できる。 つまり bxutf8 + bxucs + OTF(upLaTeX の場合は OTF は不要) という組み合わせになる(bxucs は bxbase を自動で読み込む)。 この場合、ある文字について欧文と和文のどちらが使われるかは、 次の規則による。

  • \UI による入力は和文のみが使われ、 欧文は使われない。
  • \Ux による入力は欧文が優先され、 現在の USF フォントがその文字を持たない場合は和文が使われる。
  • UTF-8 による直接入力では、まず和文 TeX がネイティブに 和文文字として取り扱う文字― pLaTeX では JIS X 0208 の文字、upLaTeX では pxcjkcat で制御可能―は 当然和文文字になる。 その他については \Ux と同じ。

参考:「フォントに文字があるか」 の判断は、実際には USF フォントの設定により決まる。 例えば、charis の設定(usfcharis.fd)は次のようになっている。

\USFDeclareFontShape{charis}{00-05,1D-1E,20-25,27,2C,A7,F1-F3,F6,FB,FE-FF}{
  \USFShape{m}{n}{<->charis-r-u#1}{}
  \USFShape{m}{it}{<->charis-ri-u#1}{}
  \USFShape{bx}{n}{<->charis-b-u#1}{}
  \USFShape{bx}{it}{<->charis-bi-u#1}{}
}

\USFDeclareFontShape の第 2 引数には、 subfont の TFM が存在する Unicode の行(UCS2 の上位バイト) の番号を列挙する。 その上で、コード値 U+XXYY の文字 (XX 番の subfont の位置 YY にある) の有無は次のように判断される。

  • TeX 処理系が e-TeX 拡張をもつ場合: subfont XX 番が有効(列挙された中にある)であり、 かつ XX 番の位置 YY に文字(これは U+XXYY のはず)が存在する。 (e-TeX 拡張プリミティブ \iffontchar を用いている。)
  • TeX 処理系が e-TeX 拡張をもたない場合: subfont XX 番が有効であれば存在すると判断する。 もし XX 番の位置 YY の文字が実際には無かった場合、 警告が出て文字が欠けてしまう(和文の処理に回らない)。

次の例を用いて、欧文と和文の Unicode 処理を併用した場合に期待通りの出力を得る為の注意点を説明する。

% このファイルの文字コードは UTF-8

% platex -kanji=utf8 の場合 (BOM なしにする必要あり)
\documentclass[a4paper]{jarticle}
\usepackage{otf}

% uplatex の場合
%\documentclass[a4paper]{ujarticle}
%\usepackage[prefernoncjk]{pxcjkcat} % キリル文字を欧文扱いにする 

\usepackage[bxutf8]{inputenc}
\usepackage{bxucs}
\renewcommand{\rmdefault}{charis}\normalfont

\begin{document}
\begin{itemize}
\item A, B, C, D, E
\item А, Б, В, Г, Д   % キリル文字(U+04xx)
\item Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ   % ローマ数字(U+21xx)
\item ①, ②, ③, ④, ⑤   % 丸囲み数字(U+24xx)
\item ㋐, ㋑, ㋒, ㋓, ㋔   % 丸囲みカタカナ(U+32xx)
\end{itemize}
\end{document}

これを pLaTeX で組版すると、以下のような問題点が見つかる。

  1. キリル文字が和文(全角文字)として出力される。
  2. 丸囲み数字が出力されない。

1 の原因は、キリル文字が JIS X 0208 にある文字なので、 pTeX がこれを先に和文文字として取り扱うからである。 これを欧文の扱いにするには、以下のような方法がある。

2 の原因は、 「charis の USF には 24 番の subfont があるのに、 丸囲み数字(例えば「丸1」は U+2460)のグリフを持たない」からである。 つまり元の OpenType フォントの Charis SIL が U+24xx の範囲のいずれかの グリフを持つが U+2460 はないということである。 (なお、Charis SIL はローマ数字のグリフは持っているので、 「欧文が優先される」という原則に従って、 ローマ数字は欧文フォントで出力されている。) 丸囲み数字が欧文フォントにないのは仕方が無いとして、 和文フォントにあることが分かっているのであれば和文として出力したい。 このためには次のような方法がある。

  • \UI によるコード値入力にする。
  • 処理系を e-TeX 拡張をもつ pTeX である e-pTeX に変える。 e-pTeX はごく最近(2008 年以降)の W32TeX には含まれていて、 e-pTeX 上の LaTeX である e-pLaTeX がコマンド名 eplatex で利用できる。 e-pLaTeX の文書の書き方は pLaTeX と全く変わらない。 つまり、pLaTeX 用の文書は全てそのままで e-pLaTeX で組版できる。

すなわち、UTF-8 の直接入力のまま、全てを期待通りに出力しようとすると、 upTeX 拡張と e-TeX 拡張の両方、つまり「e-upTeX」が必要になる。 幸い e-upTeX はちゃんと存在していて W32TeX では upTeX と一緒にインストールされ、 e-upTeX 上の LaTeX である e-upLaTeX がコマンド名 euplatex で利用できる。 上記のサンプル(先頭を uplatex 用に直したもの)を e-upLaTeX で処理させると、期待通りの出力になっていることがわかる。

Safe caret 機能

pLaTeX で Unicode 文字を使う場合には以下のような問題がある。 verbatim で処理されているテキストの中ではこれまでに 述べた Unicode 文字の処理が失敗するのである。

(正しく出力されない例)

\documentclass{jsarticle}
\usepackage{bxbase}
\usepackage[bxutf8]{inputenc}
\usepackage{otf}
\begin{document}
\verb|\int| は次のように使う。「式①~③」には任意の数式を書ける。
\begin{quote}\begin{verbatim}
\int_{式①}^{式②} 式③
\end{verbatim}\end{quote}
\end{document}

これを組版すると、verbatim の外の丸囲み数字は正しく出力 されるが、verbatim 環境の中は

\int_{式^^e2^^91^^a0}^{式^^e2^^91^^a1} 式^^e2^^91^^a2

という訳の分からない出力になってしまう。

参考: ptexenc 拡張をもつ pTeX では 従来の和文文字のデコード処理との衝突を避けるために pTeX で直接扱う JIS X 0208 の文字以外の文字を表す UTF-8 の バイト列を一旦上のような形式に変換している。 通常は TeX は ^^ab をコード ab(16 進)のバイトと 解釈するのでこれで上手くいくのであるが、 verbatim の中ではこの ^^ab も 「そのまま」になってしまうのである。

この問題を解決するのが、bxbase/pxbase パッケージの \safecaret 命令である。 プレアンブルにおいてこの命令が実行されると、verbatim 系の入力 の中でも Unicode 文字の処理が正しく行われる。

\documentclass{jsarticle}
\usepackage{pxbase} % \safecaret を使うのに必要
\usepackage[bxutf8]{inputenc}
\usepackage{otf}
\safecaret
\begin{document}
\verb|\int| は次のように使う。「式①~③」には任意の数式を書ける。
\begin{quote}\begin{verbatim}
\int_{式①}^{式②} 式③
\end{verbatim}\end{quote}
\end{document}

(なお、bxutf8 を使う場合には pxbase と bxbase の一方があれば よいので、上の例では bxbase は不要である。)

verbatim 系以外に \safecaret が必要になる場面として、 Babel で ^ をアクティブにする言語(esperanto 等) を使う場合がある。 要するに「^ を普通とは異なる用途で用いる場合」と いうことである。

\documentclass[a4paper]{article}
\usepackage[esperanto]{babel}
\usepackage[bxutf8]{inputenc}
\usepackage{pxbase}
\usepackage{otf}
\safecaret
\begin{document}
Mi legas \emph{San^so-daju} (山椒大夫),  % ^s は〈ŝ〉
romanon kreitan de Mori Ogai (森鷗外).
\end{document}

bxutf8x 入力エンコーディング

bxutf8 入力エンコーディングは、utf8 を基にしているので、 utf8x を前提とする「unicode パッケージ(ucs パッケージ)」 とは共存できない。 すなわち、utf8x では可能な 「LGR エンコーディングでギリシャ語をまともに処理する」 といったことと bxutf8 を使った処理が同時にできないことになる。 そこでこれを可能にすべく、 「utf8x で処理し、それが無理なら bxbase に回す」 ような入力エンコーディングの bxutf8x を作成してみた。 ただし、utf8 と違い utf8x(ucs パッケージ) は非常に複雑なプログラムであるので、 今の実装がどれだけまともに動くかについては自信が無い。 (なお、bxutf8x を使うためには unicode パッケージが必要である。)

信頼性の他にも bxutf8x には大きな問題がある。 utf8x は utf8 と異なり、フォントエンコーディングの読込状況に 関わらず、広範な範囲の文字を自分で処理しようとする。 結果的に、bxucs の方には処理がほとんど回らなくなっている。 つまり、きちんとフォントエンコーディングを指定して、 それに合ったフォントを使わなければならないということである。 ただ、utf8x は既定では CJK 文字は自前で処理しないので、 JIS X 0208 の外の CJK 文字の処理は使用できる。

従って、bxutf8x の使用が適当な用途として考えられるものは、 utf8x を必要とするギリシャ語等の Babel による「まともな処理」 と JIS X 0208 外の CJK 文字の入力を、 pLaTeX において併用する場合ということになる。 ただこの場合、肝心のギリシャ文字やキリル文字が pTeX で和文扱いされるという問題に引っかかってしまうので、 さらに PXfltsrc も必要になる。 (なお upLaTeX はそもそも CJK 文字の UTF-8 入力に入力エンコーディングを必要としない。) 以下でそのような例を挙げてみた。

% このファイルの文字コードは UTF-8 (BOM なし)
% platex に -kanji=utf8 と -shell-escape が必要
\documentclass[a4paper]{jsarticle}
\usepackage[T2A,T1]{fontenc}   % ここでは T2A を使う
\usepackage[bxutf8x]{inputenc} % bxutf8x を使う
\usepackage{pxbase}            % 和文 Unicode 処理に必要
\usepackage[multi]{otf}      % ハングルの出力に必要
\usepackage[russian,english]{babel} % 'russian' を使う
\usepackage{pxbabel}         % 'korean' を使う
\usepackage[ucyrl]{pxfltsrc} % キリル文字を欧文扱いにするフィルタを使用
\begin{document}
\pxflstart                   % 以降にフィルタ適用
「友達」のことを韓国(大韓民国)では
「\foreignlanguage{korean}{친구}(親舊)」というのに対し、
北朝鮮(朝鮮民主主義人民共和国)では
「\foreignlanguage{korean}{동무}」という。
この\foreignlanguage{korean}{동무}というのは朝鮮固有語で元々は
朝鮮半島全土で使われていたが、分断後の韓国では使われなくなった。
その理由は、北朝鮮がこの語をロシア語の\ 
\foreignlanguage{russian}{товарищ}(同志)の訳語として用いたため
韓国では使用が避けられるようになったからだという。
\end{document}

参考: 同じ文書を upLaTeX で作ると次のようになる。 bxutf8x は不必要で utf8x でよいということに注意。

% このファイルの文字コードは UTF-8
% uplatex が必要
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8x]{inputenc} % bxutf8x ではない
\usepackage[russian,english]{babel}
\usepackage{pxbabel}
\usepackage[prefercjkvar]{pxcjkcat} % キリル文字を欧文扱い
\begin{document}
「友達」のことを韓国(大韓民国)では
「\foreignlanguage{korean}{친구}(親舊)」というのに対し、
北朝鮮(朝鮮民主主義人民共和国)では
「\foreignlanguage{korean}{동무}」という。
この\foreignlanguage{korean}{동무}というのは朝鮮固有語で元々は
朝鮮半島全土で使われていたが、分断後の韓国では使われなくなった。
その理由は、北朝鮮がこの語をロシア語の\ 
\foreignlanguage{russian}{товарищ}(同志)の訳語として用いたため
韓国では使用が避けられるようになったからだという。
\end{document}