BXfltsrc パッケージ(旧 PXfltsrc)
~文書に自動的に前処理を施す~

変更履歴
  • 2011/03/01:0.5 版を公開。 0.5 版の新機能の解説はもう少しお待ち下さい……。

概要

LaTeX において、(shell escape の機能を用いて) 組版時に自動的に入力ファイルにある種の変換フィルタが施されるようにする。 日本語コード変換(SJIS/EUC/JIS/UTF-8/CP832; 補助漢字や拡張漢字を含む、 自動判別可能)、ギリシャ・キリル文字の「欧文化」、 任意の外部フィルタ(安田功氏の Utf82TeX 等) の呼び出し等が利用できる。

元々 pLaTeX(拡張エンジン含む)用のパッケージバンドルで PXfltsrc という名前であったが、 0.5 版から pLaTeX 用の pxfltsrc と欧文 LaTeX 用の bxfltsrc パッケージの両方を含むようになり、 バンドル名も BXfltsrc に改名された。 もちろん、過去の pxfltsrc パッケージについての互換性は保証される。

  • bxfltsrc パッケージ: 本体(欧文 LaTeX 用)
  • pxfltsrc パッケージ: 本体(pLaTeX 用)
  • pxflgc パッケージ: ギリシャ・キリル文字の処理
  • pxflhwka パッケージ: 半角カタカナの処理
  • pxflcchr パッケージ: JIS X 0213 仮名の処理
  • pxflcln パッケージ: 一時ファイルの削除

対応環境

  • LaTeX、エンジン不問 (shell escape 機能対応のもの)
  • Perl(5.8.1 版以降)

ダウンロード

インストール方法については、 パッケージに含まれる解説文書を参照。

注意: 0.5 版においてインストール先ディレクトリが変更されたので、 それより前の版から更新する場合は前のものを削除する必要がある。

注意

BXfltsrc を使う場合は、latex(platex 等も含む)の起動の際に shell escape を有効にする必要がある。 W32TeX および ptetex3 の latex の場合、 次のようなコマンド行を用いる。

latex -shell-escape〈入力ファイル名〉

また、pLaTeX の入力漢字コードを既定のもの(W32TeX では Shift JIS) から変更する場合は、

platex -kanji=〈漢字コード〉〈入力ファイル名〉
(〈漢字コード〉は jis, sjis, euc, utf8 のいずれか)

のようにする。 (勿論、両方のオプションを指定することもできる。)

注意: shell escape 機能とは、 入力 TeX ファイルの中に \write18{コマンド行} の形式で書かれた任意のコマンドを 実行する機能である。従って、shell escape を有効にしたままで信頼できない TeX ファイルを処理してはいけない。 悪意のあるコマンドが実行される可能性がある。

参考:入力文字コードに UTF-8 (-kanji=utf8)が利用できるのは、ptexenc に対応した pTeX 処理系(W32TeX や ptetex3 のもの)に限られる。 また欧文 UTF-8 入力(\usepackage[utf8]{inputenc}) を利用したサンプルを処理する為には pTeX の版が 3.1.4 以上である必要がある。

pxfltsrc のサンプル

pxfltsrc パッケージは pLaTeX(拡張エンジンを含む) にとって有用な内部フィルタを備えている。 以前の「PXfltsrc バンドル」の pxfltsrc パッケージの改版である。

最初に一つ注意。 以降の例では、pLaTeX の既定の入力文字コードを Shift JIS としている。 つまり、普段 pLaTeX のソース(文書)を書くときに用いる文字コードが Shift JIS ということである。 Windows (W32TeX) の場合はそうなっている。

漢字コード変換

まず最初に、最も基本的な、役に立たない使い方。 EUC-JP の文書を Shift JIS 入力が既定の pLaTeX で処理する。

% このファイルの文字コードは EUC-JP
\documentclass{jsarticle}
\usepackage[euc]{pxfltsrc}
\begin{document}
\filterstart  % ここ以降を変換。
こんにちは。  % EUC-JP で記述
\end{document}

\filterstart 以降が文字コード変換の対象となるので、 和文文字が現れる前に \filterstart を置く必要がある (なお、技術的制約により、\filterstart は行の先頭に置かなければならない)。 ただ、上のサンプルでは、先頭のコメントにある和文文字は EUC-JP のまま読み込まれることになるが、これは最近の pTeX では問題ない (つまり正しく無視される)はずである。

もちろんこの場合は PXfltsrc なんか使わなくても、 -kanji=euc オプション(上述)を指定すればよい。

次に、複数の文字コードが混在する場合を示す。 \filterinput を実行すると、以降の LaTeX ファイル読み込み(\input\usepackage) に対して文字コード変換が適用される。 byte は特殊な設定で、8 ビット文字を欧文 LaTeX と同じように扱うべき時に用いる。

% このファイルの文字コードは pTeX 既定のもの(Shift JIS)
\documentclass{jsarticle}
\usepackage[byte]{pxfltsrc} % 入力コードに byte を指定
%\usepackage{pxfltsrc}    %+ 上の行の代わりにこの 2 行を
%\filterinencoding{byte}  %+   書いても同じ
\filterinput       % 以降に読み込まれるファイルに変換適用
\usepackage{foo}   % foo.sty は欧文の 8 ビット文字を含む
\nofilterinput     % 読み込みファイルへの変換を停止
\begin{document}

ほげほげ。 % ここは Shift JIS

\filterinput \filterinencoding{utf8}
\input{bar.tex}  % bar.tex は UTF-8 で書かれている
\nofilterinput

ふがふが。

\input{gee.tex} % これは変換せずに読み込まれる
                %(つまり Shift JIS のはずである)
\end{document}

次に自動判別を使う例。 運がよければ全ての \input が上手くいくであろう。

% このファイルの文字コードは Shift JIS
\documentclass{jsarticle}
\usepackage[inauto]{pxfltsrc} % 入力コードは自動判別
%\usepackage{pxfltsrc}    %+ 上の行の代わりにこの 2 行でも同じ
%\filterinencoding{auto}  %+
\begin{document}
ほげほげ。

\filterinput
\input{src-euc.tex}  % このファイルは EUC-JP
\input{src-jis.tex}  % このファイルは ISO-2022-JP
\input{src-sjis.tex} % このファイルは Shift JIS
\input{src-utf8.tex} % このファイルは UTF-8

\end{document}

なお、この例では、例え文字コードが UTF-8 であっても、 JIS X 0208(基本漢字)以外の「全角文字」を使うことはできない。 これを可能にする方法は次を参照。

補助漢字(JIS X 0212)・拡張漢字(JIS X 0213)を使う

(ここでも pLaTeX の既定の入力文字コードを Shift JIS とする。)

この小節のサンプルを処理するには、次のものが必要である。

  • 齋藤修三郎氏作成の OTF パッケージ: W32TeX の場合は、 配布元にある otf.tar.bz2 をインストールする。
  • 拙作の BXbase バンドル。 この中の bxutf8 入力エンコーディングと bxbase パッケージを用いる。

まずは PXfltsrc を使わない方法。 入力コードが UTF-8 である pLaTeX (platex -kanji=utf8) では、JIS X 0208(基本漢字:第1・第2水準)にない文字は UTF-8 のバイト列として読み込まれる。 (結果的に欧文 LaTeX で処理した時と同じ状況になる。) ここで、bxutf8 入力エンコーディングと bxbase パッケージを 読み込んであると、 UTF-8 のバイト列を OTF パッケージの Unicode 文字出力命令に変換する。 これを利用して、JIS X 0208 外の文字を含む文書を UTF-8 で書くことで pLaTeX での処理が可能になる。 (詳細は「Unicode による文字入力」 を参照してほしい。)

例えば、次のソース(文字集合は ASCII + JIS X 0208 + JIS X 0212; 文字コードは UTF-8)を platex -kanji=utf8 で組版することができる。 (勿論、結果の DVI ファイルを見るには、OTF パッケージ対応の DVI ウェアと適切な設定が必要である。詳しくは、 TeX Wiki の OTF の項目を参照。)

% このファイルの文字コードは UTF-8
% platex に -kanji=utf8 が必要
\documentclass{jarticle}
\usepackage[bxutf8]{inputenc}  % bxutf8 +
\usepackage{bxbase}            % bxbase を使う
\usepackage{otf}               % OTF を使う
\begin{document}
森鷗外      % Unicode (BMP) の漢字は何でも入力できる
\end{document}

PXfltsrc を使うと、UTF-8 以外の (基本漢字をはみ出す)文字コードを使うことができる。 具体的には、pxfltsrc に適切なオプションを与えれば、 次に挙げる文字コードの文書が処理できる。

  • UTF-8 → オプションは utf8
  • EUC-JP(補助漢字 = JIS X 0212 を含む) → オプションは euc
  • EUC-JIS-2004(拡張漢字 = JIS X 0213 を含む) → オプションは euc
  • Shift_JIS-2004(拡張漢字 = JIS X 0213 を含む) → オプションは sjis
  • CP932 (Windows の「シフトJIS」) → オプションは winj

(入力エンコーディング は \filterinencoding でも指定可能。)

% このファイルの文字コードは EUC-JP (補助漢字を含む)
\documentclass{jarticle}
\usepackage[euc]{pxfltsrc} % オプションに euc
\usepackage[bxutf8]{inputenc} %+
\usepackage{bxbase}           %+ この部分はそのまま
\usepackage{otf}              %+
\begin{document}
\filterstart
\begin{itemize}
\item 森鷗外                         % 鷗:76-31
\item 鄧小平                         % 鄧:66-39
\end{itemize}
\end{document}

参考: PXflrsrc は、 LaTeX ファイルを指定された文字コードで解読し、 必要な処理を行った後、ISO-2022-JP(JIS エンコーディング) で符号化し、JIS X 0208 にない文字は「TeX エスケープされた UTF-8 バイト列」に変換している。 pTeX は ISO-2022-JP のファイルは、入力コード指定に関わらず 正しく読み込める。

この機構を利用して、CP932 (Windows で「シフトJIS」と呼ばれている文字コード。 いわゆる「機種依存文字」を含む) で書いたソースを処理することができる。

% このファイルの文字コードは CP932
\documentclass{jarticle}
\usepackage[winj]{pxfltsrc} % オプションは winj
\usepackage[bxutf8]{inputenc} %+
\usepackage{bxbase}           %+ ここは同じ
\usepackage{otf}              %+
\begin{document}
\filterstart
\begin{itemize}
  %「機種依存文字」の丸数字やローマ数字や漢字を書く
\item[①] 内田百閒                       % 閒:FBE8
\item[②] 鄧小平                         % 鄧:FBB9
\item[③] ウィリアム・ヘンリー・ゲイツⅢ世
\end{itemize}
\end{document}

拡張漢字(JIS X 0213)のための追加機能

v0.3 から、JIS X 0213 をより完全に扱うための 機能が追加された。

  • cxkana オプションを指定して pxflcchr パッケージを読み込むと、 JIS X 0213 の仮名文字のうち Unicode で文字合成が必要なものが 正しく出力できる。
  • useaj オプションを指定すると、 Unicode の SIP(第 2 面)の漢字のうち Adobe-Japan1 にあるものが出力できる。 (内部で OTF パッケージの \CID 命令に変換している。)

いずれも OTF パッケージを必要とする。

% このファイルの文字コードは Shift_JIS-2004
\documentclass[a4paper]{jsarticle}
\usepackage[sjis,cxkana,useaj]{pxfltsrc} % cxkana, useaj を指定
\usepackage{pxflcchr}                    % さらにこれを読込
\usepackage[bxutf8]{inputenc}   %+
\usepackage{bxbase}             %+ ここはいつも通り
\usepackage{otf}                %+
\begin{document}
\filterstart
\begin{itemize}
  %「カ゚」(1-5-87)は Unicode では<カ + U+309A>
\item 語学「ゴカ゚ク」 / 言語学「ゲンコ゚カ゚ク」
\item 土屋さん / 圡屋さん / 𡈽屋さん  %「𡈽」(1-15-34)は U+2123D
\end{itemize}
\end{document}

なお、この機能を使うのにエンコーディングが JIS X 0213 用のものである必要はない。 上の文書がもし UTF-8 で入力されているなら、 オプションの sjisutf8 に変えるだけである。 (ちなみに、Shift_JIS-2004 に対する自動判別は恐らく上手くいかない。)

useux オプション

このパッケージでは 「JIS X 0208(基本漢字)以外の文字は UTF-8 のバイト列に変換 した上で LaTeX に処理させる」ことを基本の処理として、 それで上手くいかない点を補うという考えをとっている。 しかし実際には「基本漢字以外は単に OTF パッケージの \UTF で 処理すればよい」という場合が多く、 その場合に多数のパッケージを読み込むのは煩雑に思えるかもしれない。

パッケージ読込時に useux オプションを指定すると、 UTF-8 のバイト列の代わりに \UTF 命令に変換されるようになる。 従って、pxfltsrc の他には OTF(UTF)パッケージだけ読み込めば よいことになる。

% このファイルの文字コードは UTF-8
\documentclass{jarticle}
\usepackage[utf8,useux]{pxfltsrc}
\usepackage{otf}
\begin{document}
\filterstart
\begin{itemize}
\item[①] 森鷗外
\item[②] 内田百閒
\item[③] 鄧小平
\item[④] ウィリアム・ヘンリー・ゲイツⅢ世
\end{itemize}
\end{document}

ちなみにこの例は BMP の文字しか使っていないので bxbase + bxutf8 で 処理する場合は pxfltsrc 自体が不要(platex -kanji=utf8 で 組版する)である。 BMP 外の文字の一部は前小節で述べたように useaj を 併用すれば出力できる。

参考: 実際の処理は、\UTF に 直接変換しているのではなく、\Ux という命令に変換している。 これは bxbase(または pxbase、以下同)パッケージで定義されている、 Unicode 文字入力のための「汎用的な」命令である (「Unicode による文字の入力」)。 従って、本来なら bxbase の読込が必要なのだが、 0.4 版の改訂で bxbase がない場合は \Ux を 単に \UTF に渡すようにした (bxbase 併用時はそちらの定義を使う)。 また、useaj も実際には一度 \AJ という 命令に変換している。 今のところ、\AJ は OTF パッケージの \CID に渡す以外の処理方法はない。

ギリシャ文字とキリル文字の「欧文化」

utf8 指定の inputenc を用いて UTF-8 で記述された文字を読み込む方法は、欧文文字に対しても 適用できる(というか、そちらが本来の用法である)。 (ただし、ギリシャ文字(LGR エンコーディング)を扱うには、 utf8 の代わりに高機能な utf8x を使う必要がある。) しかし、(PXfltsrc なしの)pLaTeX では、JIS X 0208 に存在するギリシャ文字とキリル文字(ロシア文字)は、 和文文字として扱われるので、 和文用のフォントで出力され、また行分割処理等も上手くいかない。 例えば、以下の例(-kanji=utf8 付きで処理する)では、 ά 以外のギリシャ文字と全てのキリル文字が 「和文文字扱い」になってしまう。

(この小節のサンプルは OTF パッケージを必要とする。 また、Babel パッケージやギリシャ・キリル文字のフォントが 正しく導入されている必要がある。)

〈正しく出力されない例〉
% このファイルの文字コードは UTF-8
% platex に -kanji=utf8 が必要
\documentclass{jarticle}
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8x]{inputenc} % utf8x を指定
\usepackage[russian,greek,english]{babel}
\begin{document}
日本語、English、Français、
\foreignlanguage{greek}{Ελληνικά}、
\foreignlanguage{russian}{Русский язык}
を含む文書。
\end{document}

そこで、pxfltsrc のオプションとして ugrekucyrl を指定する。 これで、ギリシャ文字(ugrek)・キリル文字 (ucyrl)が、あたかも JIS X 0208 にない文字のように(エスケープされた)UTF-8 のバイト列に変換される (以後この処理を「欧文扱い」と呼ぶ)。 従って、utf8xinputenc を通して、欧文の Unicode 文字として処理される。

% このファイルの文字コードは UTF-8(BOM なし)
\documentclass{jarticle}
\usepackage[utf8,ugrek,ucyrl]{pxfltsrc} % ギリシャ・キリル文字を欧文扱い
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8x]{inputenc} % utf8x を指定
\usepackage[russian,greek,english]{babel}
\begin{document}
\filterstart
日本語、English、Français、
\foreignlanguage{greek}{Ελληνικά}、
\foreignlanguage{russian}{Русский язык}
を含む文書。
\end{document}

この場合、同時に和文のコード変換もされているので、 -kanji=utf8 はもはや不要なはずである。 ところが、UTF-8 の文書の先頭に BOM がある場合、 これはコード変換の対象にならない (必然的に \filterstart 以前にある)ので、 -kanji=utf8 なしで処理するためには BOM なしの UTF-8 にする必要がある。

同様に、オプション upnct に指定すると、 句読点類(Unicode ブロック “General Punctuation” に属する文字;U+2000〜U+206F)が「欧文扱い」になる。

% このファイルの文字コードは UTF-8(BOM なし)
\documentclass{jarticle}
\usepackage[utf8,upnct]{pxfltsrc}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}
\filterstart
“¿But aren’t Kafka’s Schloß and Æsop’s Œuvres often naïve vis-à-vis the dæmonic
phœnix’s official rôle in fluffy soufflés?” \par
「しかしカフカの『城』もイソップの作品もふわふわのスフレの中の悪魔的不死鳥の
公的役割に比すれば素朴であることも屡々ではないか?」
\end{document}

なお、入力文字コードは UTF-8 である必要はない。 ロシア語の文字だけなら、JIS X 0208 に基づく文字コードでも構わない。 なお、次例では「ロシア語を簡単に出力する例」を意図して キリル文字のフォントに W32TeX に最初から含まれる Washington Cyrillic (wncyr) を用いている。 (この簡易設定では分綴は不正になるのでキリル文字部分は \mbox に入れている。)

% このファイルの文字コードは pTeX 既定値 (Shift JIS)
\documentclass{jarticle}
\usepackage[ucyrl]{pxfltsrc}
\filterstart
\usepackage[OT2,OT1]{fontenc}
\usepackage[utf8]{inputenc}
\newcommand*{\Rus}[1]{%
  \mbox{\fontencoding{OT2}\fontfamily{wncyr}\selectfont#1}}
\begin{document}

日本語の外来語の中にロシア語を起源とするものがある。
ペレストロイカ(\Rus{перестройка})やウォッカ(\Rus{водка})、
ボルシチ(\Rus{борщ})といったロシア(ソ連)に直接関連するものは除いても、
イクラ(\Rus{икра};魚卵)やノルマ(\Rus{норма})は元はロシア語で、
また「インテリ」は英語の intelligence ではなくロシア語の\ 
\Rus{интеллигенция})の省略形である。

\end{document}

半角カタカナの扱い

半角カタカナを含む LaTeX 文書を処理するには次のようにする。

  • OTF パッケージを読み込む。
  • pxfltsrc パッケージを chwka オプション付きで読み込む。
  • PXfltsrc 付属の pxflhwka パッケージを読み込む。

入力文字コードは ISO-2022-JP(JIS エンコーディング)以外は オプションで適切に指定する限り何でも良い。

% このファイルの文字コードは pTeX 既定値 (Shift JIS)
\documentclass{jarticle}
\usepackage[chwka]{pxfltsrc} % 入力文字コードは既定値(Shift JIS)
\usepackage{pxflhwka}
\usepackage{otf}
\filterstart
\begin{document}

日本で最初にコンピュータウイルスが作られたのは1988年のことであった。
それはX68000用の「SURGEON」というソフトウェアの違法コピー対策として
作られたもので、感染すると画面に
\begin{quote}
SURGEON買ってね! ウヒョ
\end{quote}
というメッセージを出すものであった。

\end{document}

注意: 半角カタカナは Unicode に含まれるので、一見すると他の Unicode 文字の処理と 同じく UTF-8 に変換させて otf で処理するとよさそうだが、 実際には正しい出力にならない。 これは OTF パッケージの仕様に起因する。

\filteredverbatiminput 命令

\filterinput が有効な時には、\input\usepackage で読み込むファイルがフィルタ適用の対象 になるが、他のパッケージが読み込むファイルも対象になることがある。 対象になるか否かは当該パッケージのファイル読込の処理方法に依存する。

verbatim パッケージの \verbatiminput 命令は、 (verbatim パッケージの)verbatim 環境の中と同じ状態で ファイルを読み込む(すなわちファイルの内容が「そのまま」出力される) 命令である。 文字コード変換を使っている場合等で、\verbatiminput で読むファイルにも適用したいことがあるが、残念ながら、 \verbatiminput の対象ファイルには pxfltsrc のフィルタは適用されない。 そこで、フィルタが適用される \verbatiminput を 別に \filteredverbatiminput という名前で用意した。

% このファイルの文字コードは pTeX 既定値 (Shift JIS)
\documentclass{jarticle}
\usepackage{verbatim}
\usepackage[utf8]{pxfltsrc}
\begin{document}
英数字を半角に変換するフィルタ。
入出力は UTF-8 で行い、このファイル自身も UTF-8 で書く。
\begin{quote}\small
\filteredverbatiminput{an2hw.perl}
\end{quote}
\end{document}

ファイル an2hw.perl の内容(文字コードは UTF-8)。

#!/usr/bin/perl
use utf8; use open ':std', ':utf8';
while (<>) { tr/A-Za-z0-9/A-Za-z0-9/; print; }
# EOF

ただし、\filteredverbatiminput で読み込むファイルが JIS X 0208(基本漢字)以外の文字を含んでいる場合は少々 面倒なことになる。 この場合、UTF-8 バイト列を処理する仕組み(bxutf8 + OTF パッケージ)が 必要である上に、さらに「verbatim の中の UTF-8 バイト列を扱う」 ために pxbase パッケージの \safecaret を呼び出す 必要がある。 従って、プレアンブルは次のようになる。

% このファイルの文字コードは pTeX 既定値 (Shift JIS)
\documentclass{jarticle}
\usepackage{verbatim}
\usepackage{otf}
\usepackage{pxbase} % \safecaret には pxbase が必要
\usepackage[bxutf8]{inputenc}
\usepackage[utf8]{pxfltsrc}
\safecaret
\begin{document}
「鴎外」を「\Ux{9DD7}外」に変換するフィルタ。
入出力は UTF-8 で行い、このファイル自身も UTF-8 で書く。
\begin{quote}\small
\filteredverbatiminput{ogai.perl}
\end{quote}
\end{document}

ファイル ogai.perl の内容(文字コードは UTF-8)。

#!/usr/bin/perl
use utf8; use open ':std', ':utf8';
while (<>) { s/鴎外/鷗外/g; print; }
# EOF

出力結果は以下のようになる。

外部フィルタの適用

オプションとして、 + の後にコマンド行を書いたものを指定すると、 そのプログラムがフィルタ (標準入力から読み込み何らかの変換を施した結果を標準出力に書き出す) として入力 TeX ソースに適用される。 外部フィルタの変換のみを適用し PXfltsrc の行う通常の変換 (コード変換等)は行わない場合は、入力文字コードとして thru を指定する。 もし両方を併用する場合(thru でない場合) は、PXfltsrc の行う処理の後に外部フィルタが適用される。

例として、安田功氏製作の Utf82TeX を使用することを考える。 このプログラムは入力も出力も UTF-8 で行う。 従って、入力 LaTeX ファイルを UTF-8 で書き、 pLaTeX に -kanji=utf8 を付ける。 PXfltsrc の入力文字コードは thru にする。

% このファイルの文字コードは UTF-8
% platex に -kanji=utf8 が必要
\documentclass{jarticle}
\usepackage[thru,+utf82tex]{pxfltsrc}
\usepackage[OT2,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian,greek,english]{babel}
\usepackage[multi]{otf}
\begin{document}
\filterstart
日本語、한국어、
%<utf82tex_c>
简体中文%   「\UTFC{...}」に変換されるので % が要る
%</utf82tex>
、
%<utf82tex_t>
繁體中文%
%</utf82tex>
、English、Français、
\foreignlanguage{greek}{Ελληνικά}、
\foreignlanguage{russian}{Русский язык}
を含む文書。
\end{document}

Utf82TeX と PXfltsrc 自身の処理を併用する場合、 PXfltsrc 自身の変換の出力(Utf82TeX への入力となる)は UTF-8 でなければならないので、オプションに oututf8 を追加する必要がある。 次例は入力を EUC-JP にしたものである。

% このファイルの文字コードは EUC-JP
% platex に -kanji=utf8 が必要(euc でない!)
\documentclass{jarticle}
\usepackage[euc,oututf8,+utf82tex]{pxfltsrc} % EUC-JP→UTF-8 に変換
\usepackage[multi]{otf}
\begin{document}
\filterstart
中国語(簡体字)では『骨』という字を『
%<utf82tex_c>
骨%
%</utf82tex>
』と書く。
\end{document}
参考: この場合、pLaTeX が最終的に「読む」の は Utf82TeX の出力であるから、pLaTeX の入力漢字コードを UTF-8 にする (オプション -kanji=utf8)必要がある。

注意: \usepackage のオプション引数の中では、 空白文字は無視され、またコンマは区切り文字になるので、 これらの文字を含むコマンド行をそのまま書いても上手くいかない。 このようなコマンド行を使いたい場合は、 該当のオプションを { } で囲めばよい。 (この時、囲った全体の前後に余分の空白がないようにする 必要があるようである。)

\usepackage[thru,{+utf82tex -r}]{pxfltsrc}

参考: 0.4 版で試験的に 「漢字を全部 UTF-8 バイト列に変換する」オプション ukanji を導入した。 これと pxbabel パッケージ(PXbase バンドル)と OTF パッケージを併用することで上の例と同じことができる。

% このファイルの文字コードは EUC-JP
\documentclass{jarticle}
\usepackage[euc,ukanji]{pxfltsrc} % ukanji オプション
\usepackage[multi]{otf}           % \UTF, \UTFC を処理する
\usepackage{bxbase}               % \Ux を \UTF に渡す
\usepackage[bxutf8]{inputenc}     % UTF-8 バイト列を \Ux に変換
\usepackage[english]{babel}       % pxbabel には babel が必要
\usepackage[main=japanese]{pxbabel} % \UTF を \UTFC に切替可能にする
\begin{document}
\filterstart
中国語(簡体字)では『骨』という字を
『\foreignlanguage{schinese}{骨}』と書く。
\end{document}

次は中国語(簡体字)のテキストファイルを \filteredverbatiminput で読み込む例である。

\documentclass{jarticle}
  % パッケージがいっぱいです
\usepackage[utf8,ukanji]{pxfltsrc}
\usepackage{verbatim}
\usepackage[multi]{otf}
\usepackage{pxbase}
\usepackage[bxutf8]{inputenc}
\usepackage[english]{babel}
\usepackage[main=japanese]{pxbabel}
\begin{document}
\selectlanguage{schinese}
\filteredverbatiminput{test.sh}
\end{document}

test.sh の内容(文字コードは UTF-8)

#!/bin/sh
echo '这确实只是宏包地狱啊!'
exit 1

upLaTeX での PXfltsrc の利用

PXfltsrc が有用である事例としてこれまでに挙げたほとんどのものは、 upLaTeX では自身の機能で処理が可能である。 (詳しくは「upLaTeX を使おう」を参照。) しかし、upLaTeX 使用時でも次のような場合は PXfltsrc が有用であると思われる。

  • 外部フィルタを使用する場合。
  • UTF-8、ISO-2022-JP、Shift JIS、EUC-JP 以外の文字コードを使う場合。
  • 複数の文字コードを併用する場合。
  • 文字コードの自動判別を行う場合。

文字コード変換の例として、CP932(「Windows 機種依存文字」を含む) で書いた文書を処理する例を挙げておく。 upLaTeX は Unicode 文字を自前で扱えるので、 pxfltsrc 以外のパッケージを何も使っていないことに注意。

% このファイルの文字コードは CP932
\documentclass{ujarticle}
\usepackage[winj]{pxfltsrc}
\begin{document}
\filterstart
\begin{itemize}
\item[①] 内田百閒
\item[②] 鄧小平
\item[③] ウィリアム・ヘンリー・ゲイツⅢ世
\end{itemize}
\end{document}

参考: upLaTeX 使用時は PXfltsrc の内部フィルタの出力は UTF-8 (oututf8) が既定である。pLaTeX と同じ ISO-2022-JP にするには outjis オプションを指定する。