En toi Pythmeni tes TeXnopoleos
[電脳世界の奥底にて] |
現在のサイトは、10月末を以て終了となります。
http://zrbabbler.sp.land.to/pxbase.html
BXbase/PXbase パッケージ
- 2016/04/03: ダウンロードのリンクを GitHub に変更。
- 2010/08/22: BXbase/PXbase の 0.5 版を公開。
- 2010/01/21: 「Babel 使用時にキャプションを日本語のままにする」中の
ロシア語の扱いの誤りを訂正。
(
\Rus
や\Eng
は宣言型の命令であった。) french 言語オプションが scalefnt を要求することの注意を追加。 - 2009/11/16: BXbase バンドルのページと統合して全面的に書き直し。
概要
これらのパッケージバンドルの役割
BXbase/PXbase パッケージバンドルの役割は以下のようである。
- 拙作の他のパッケージによって使われる部品的な機能を提供している (ライブラリの役割)。 このため、他のパッケージ(およびその一部の機能)で BXbase/PXbase のインストールが求められることがある。
- 非常に「基本的」と考えられる機能を提供するパッケージを BXbase/PXbase バンドルに入れることがある (例えば pxbabel パッケージ等)。
- さらに一部の「基本的」な機能は bxbase/pxbase パッケージで
提供されることがある
(
\recordpapersize
等)。
BXbase と PXbase の関係
BXbase バンドルは欧文 LaTeX(XeLaTeX を含む)用、 PXbase バンドルは pLaTeX(upLaTeX を含む) 用のパッケージを収めている。 勿論、欧文 LaTeX 用のパッケージは pLaTeX でも使えるので、 BXbase のパッケージを pLaTeX で使うことは可能であり、 またその必要が生じることもあるだろう。
bxbase パッケージと pxbase パッケージで共通の機能をもっていることがある
(例えば \Ux
命令等)。
この場合、どちらのパッケージを用いても結果は変わらない。
また、一方にしか含まれない機能もあるので、場合によっては両方を読み込む
必要があるだろう。
パッケージ一覧
PXbase バンドル
- ifuptex パッケージ: upTeX 判定
- pxbase パッケージ: 基礎ライブラリ
- pxcjkcat パッケージ: 和文文字カテゴリ操作
- pxbabel パッケージ: CJK 間のフォント切替
- upkcat パッケージ: 文字指定の kcatcode 操作
BXbase バンドル
- bxutf8 入力エンコーディング: UTF-8 入力
- bxbase パッケージ: 基礎ライブラリ
- bxucs パッケージ: 欧文 Unicode 文字出力
- zxbase パッケージ: XeLaTeX 用基礎ライブラリ(予定)
対応環境
パッケージ付属の説明書を参照。
bxbase/pxbase パッケージの機能紹介
Unicode/CID 符号値による文字入力 [bxbase/pxbase]
Unicode および Adobe-Japan1 の CID の符号値によって文字を 入力する命令。
\Ux{<コード値16進>,...}
: Unicode、欧文扱い\UI{<コード値16進>,...}
: Unicode、和文扱い\AJ{<コード値10進>,...}
: Adobe-Japan1 CID
ただし、このパッケージ自身は入力の手段を与えているだけで、
実際の処理は「そこで利用可能な機能」を介して行われる。
例えば、\UI
は「OTF パッケージ読込の pLaTeX」
では \UTF
を使うが upLaTeX や XeLaTeX では
TeX エンジンのもつ Unicode 符号値入力の機能を使う。
詳細については、 「Unicode による文字入力」のページを参照。
JIS コード符号値による文字入力 [bxbase/pxbase]
JIS X 0208/JIS X 0213 (またはその変種)の符号値によって文字を入力する命令。
\JI{<コード値16進>,...}
: JIS コード(JIS X 0208 GL 表現)\KI{<コード値10進>,...}
: 区点コード
RRCC または PRRCC(P = 面;RR = 区;CC = 点;全て 10 進)の形式で指定する。 後者の形式は JIS X 0213 のためのもの。
\Ux
命令等と同様に、
実際の処理は「そこで利用可能な機能」を介して行われる。
今のところ、この命令が実際に使えるのは (u)pTeX 上に限られる。
また、JIS X 0213 の文字を出力するためには、
JIS X 0213 のエンコーディングをもつ和文フォント
(和文 TFM)を用いる必要があり、
なおかつ、第 2 面(第 4 水準)の漢字を出力するには、
内部漢字コードが sjis の pTeX を用いる必要がある。
Safe caret 機能 [bxbase/pxbase]
pLaTeX で JIS X 0208 外の Unicode 文字を直接入力する機能を verbatim の中でも正常動作させるための機能。 詳細については、 「Unicode による文字入力」の「Safe caret 機能」小節を参照。
日本語の PDF しおりの作成 [pxbase]
(upLaTeX の場合は 「upLaTeX を使おう」 のページを参照。)
pLaTeX において hyperref パッケージと dvipdfmx
を用いて和文文字を含むしおりや文書情報を含んだ PDF
文書を作る場合、
pdf:tounicode
special を使う
(つまりプレアンブルに
% (内部文字コードが sjis の場合) \AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}} % (内部文字コードが euc の場合) \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}
を書く)必要があった。 (注意:最近の hyperref ではこれは失敗する可能性がある。)
この作業を自動で行うのが \usejapanesepdfstring
命令である。
使っている ptex の内部文字コードに応じて適切な
special 命令を DVI に挿入する。
\documentclass{jarticle} \usepackage[dvipdfm, bookmarks=true,bookmarksnumbered=true,bookmarkstype=toc, pdftitle={pLaTeX2e怪文書作成入門},pdfauthor={絶対匿名希望}, pdfkeywords={pTeX,pLaTeX,怪文書,日本語}]{hyperref} \usepackage{pxbase} \usejapanesepdfstring \begin{document} \title{p\LaTeXe\ 怪文書作成入門} \author{絶対匿名希望} \maketitle \section{美しい怪文書組版のために} (スタブ) \section{以下省略} \end{document}
勿論、pdf:tounicode
special 命令を解釈できるのは
dvipdfmx のみなので、
この方法は dvipdfmx 専用であり、
他の DVI ウェアを用いて PDF を作る場合には使えないことに注意。
(一般に、special 命令をそれに対応していない
DVI ウェアで用いても期待通りの結果にはならず、
場合によってはエラーになる。)
\special
を直接書く方法は上手くいかなくなっている。
\usejapanesepdfstring
はこの修正に対応しているので大丈夫である。
紙面のサイズを記録する(papersize special) [bxbase/pxbase]
TeX の出力である DVI ファイルには紙面(版面)
の大きさは記録されないので、
DVI ファイルを処理するソフトウェア(DVI ウェア)は、
一般に、紙面の正しい大きさ(LaTeX で指定した大きさ)
を改めて使用者から入力して貰う
(例えば dvipdfmx の -p
オプション)必要がある。
これでは不便なので、紙面の大きさを記録する special 命令
(拡張命令)が一部の DVI ウェアでサポートされた。
それが papersize special 命令であり、
LaTeX においてはプレアンブルに次を記述すると実行される。
\AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}
この作業を行う命令(要するに上述の命令に展開されるマクロ)
が \recordpapersize
である。
これを実行すると、papersize special 命令をサポートする DVI ウェア、
例えば dviout、dvips、dvipdfm(x) 等で、
改めて紙面サイズを指定する必要がなくなる。
\documentclass[a5paper]{jarticle} % 紙面サイズは A5 \usepackage{pxbase} % または bxbase \recordpapersize \begin{document} お久しぶり、\TeX ! \end{document}
papersize special 命令対応の DVI ウェアはかなり多いが、 無論そうでないのもあるので、 やはり他の special 命令と同様の注意が必要である。
bxucs パッケージ、bxutf8 入力エンコーディング
欧文の場合、utf8 入力エンコーディング等を用いて BMP 内の Unicode 文字を 「入力」することができるが、その文字を「出力」する方法が 各種言語パッケージ等によって提供されていなければ、 結局その文字を使うことはできない。 bxucs は BMP 内の任意の Unicode 文字を「出力」する機能を提供する (色々と制限があるが)。 bxutf8 は utf8 に bxucs や OTF パッケージのサポートを加えたもの。
詳細については、 「Unicode による文字入力」の「欧文の場合」節 を参照してほしい。
pxcjkcat パッケージ
upLaTeX において、特定の文字群の「欧文扱い」「和文扱い」を変更するためのパッケージ。 例えば「ギリシャ文字は欧文として出力したい」という場合に有効である。
基本的な使用法については 「upLaTeX を使おう」 で説明している。
pxbabel パッケージ
pLaTeX/upLaTeX での CJK 言語(日本語・中国語・韓国語)
の間の「和文」フォント切替を Babel のマークアップで
行えるようにするもの。
現在、「pLaTeX + multi
オプション付の OTF パッケージ」
と「upLaTeX」に対応している。
パッケージの読込
基本的に、pxbabel は Babel の言語オプションとして、
japanese
: 日本語korean
: 韓国語schinese
: 簡体字中国語tchinese
: 繁体字中国語
の 4 つを追加する。
ここで追加されるオプションは、和文フォントの切替のみを行い、
キャプションの変更は行わないという単純なものである。
もし、上で挙げた名前のオプションが既に存在する
(babel
のオプションとして指定されている)
場合は、その設定の中にフォント切替が追加される。
例えば、
\usepackage[esperanto,latin,english,japanese]{babel} \usepackage{pxbabel}
とすると、既存の japanese
には日本語へのフォント切替が追加され、
また korean
、schinese
、tchinese
の 3 つが新たに生成される。
この場合の基底の言語は、Babel の規則に従って、
japanese
(最後に指定されたオプション)である。
もし、言語オプションの名前を変更したい場合
(典型的には、CJK 言語用の既存の言語オプションで上掲の名前と異なるものを用いている場合)
は、pxbabel のオプションに「<元の名前>=<新しい名前>
」を指定する。
% simpchinese という簡体字中国語用オプションを用いている \usepackage[simpchinese,japanese,english]{babel} % これで既存の simpchinese にフォント切替が入る % ついでに繁体字中国語も tradchinese の名前に変えた \usepackage[schinese=simpchinese,tchinese=tradchinese]{pxbabel}
オプションに main=<言語オプション名>
を指定することで基底言語を変更できる。
これを用いて、pxbabel で生成される言語オプションを基底言語に
設定することが可能になる。
%「フォントの切替」だけを使いたい場合の設定 \usepackage[english]{babel} % english はダミー \usepackage[main=japanese]{pxbabel} % 4 つの言語オプションが生成され、japanese が基底になる
babel
のオプションには本来何も要らないはずである。
しかし、オプションを指定せずに babel
を読み込もうと
するとエラーになるので、ダミーとして english
を入れている。
(アクティブ文字を一切定義しない english
が安全である。)
switchcaption
を指定すると本来の
Babel の動作に戻る。
(他の設定も可能である。詳しくは pxbabel
の説明書を参照。)
pLaTeX の場合
pLaTeX + OTF パッケージ(multi
付)の場合、
\UTF
命令を現在有効な言語によって
\UTFK
等に渡すようにする。
bxutf8 入力エンコーディングと併用した場合、
JIS X 0208 外かつ Unicode BMP 内にある CJK 文字は
\UTF
に変換されるので、
ハングル等を直接入力できるようになる
(この機構の詳細については
「Unicode による文字入力」を参照)。
% このファイルの文字コードは UTF-8 % platex に -kanji=utf8 が必要 \documentclass[a4paper]{jsarticle} \usepackage[bxutf8]{inputenc} %+ UTF-8 直接入力 \usepackage{pxbase} %+ を扱うための設定 \usepackage[multi]{otf} \usepackage[spanish,english]{babel} \usepackage[main=korean]{pxbabel} % メインを韓国語にした \pagestyle{empty} \begin{document} \foreignlanguage{spanish}{Español}을 포함하는 문서. \end{document}
ただし、この機能には重要な制限があり、
JIS X 0208 内の文字は \UTF
に処理が回らずに
pTeX が直接出力してしまうので、これらに対してはフォント切り替えが効かない。
% このファイルの文字コードは UTF-8 % platex に -kanji=utf8 が必要 \documentclass[a4paper]{jsarticle} \usepackage[bxutf8]{inputenc} %+ UTF-8 直接入力 \usepackage{pxbase} %+ を扱うための設定 \usepackage[multi]{otf} \usepackage[english]{babel} \usepackage[main=japanese]{pxbabel} \begin{document} 「骨」の簡体字は「\foreignlanguage{schinese}{骨}」。 % 下の記述ならばOK。U+9AA8 = 骨 %「\UTF{9AA8}」の簡体字は「\foreignlanguage{schinese}{\UTF{9AA8}}」。 % 「体中文」はフォントが切り替わらない 日本語、\foreignlanguage{korean}{한국어}、 \foreignlanguage{schinese}{简体中文}を含む文書。 \end{document}
JIS X 0208 の漢字にもフォント切替を有効にする方法として、
pxfltsrc パッケージの ukanji
オプションを使うものがある。
% このファイルの文字コードは UTF-8 % platex に -kanji=utf8 が必要 \documentclass[a4paper]{jsarticle} \usepackage[ukanji,useux,utf8]{pxfltsrc} \usepackage[multi]{otf} \usepackage[english]{babel} \usepackage[main=japanese]{pxbabel} \begin{document} \filterstart 「骨」の簡体字は「\foreignlanguage{schinese}{骨}」。 % 「文」の初画に注目 日本語、\foreignlanguage{korean}{한국어}、 \foreignlanguage{schinese}{简体中文}を含む文書。 \end{document}
upLaTeX の場合
upLaTeX の場合は和文エンコーディングを変更することでフォントを切り替えている。 機構が単純なので JIS X 0208 の漢字で問題が起こることもない。
\documentclass[a4paper,uplatex]{jsarticle} \usepackage[english]{babel} \usepackage[main=japanese]{pxbabel} % 下のマクロは「\verb|\expandafter|」の代用 ;-) \newcommand*{\csExpandafter}{\texttt{\symbol{`\\}expandafter}} \begin{document} \begin{itemize} \item My package is full of {\csExpandafter}'s. \item 私のパッケージは {\csExpandafter} でいっぱいです。 \item \foreignlanguage{korean}{내 패키지는 {\csExpandafter}\,로 가득합니다.} \item \foreignlanguage{schinese}{我的宏包充满了 {\csExpandafter}。} \end{itemize} \end{document}