[PR]ްpi͂܂Ђ:qĂyȂ֗тς

PXbase パッケージ

概要

pLaTeX2e / upLaTeX2e における文書およびマクロパッケージの作成を 支援する基本的な機能を提供する。 具体的には Unicode のコード値による文字入力、 upLaTeX の和文文字カテゴリ(kcatcode)の変更および CJK 間のフォント切替の支援等が含まれる。

  • ifuptex パッケージ: upTeX 判定
  • pxbase パッケージ: 基礎ライブラリ
  • pxcjkcat パッケージ: 和文文字カテゴリ操作
  • pxbabel パッケージ: CJK 間のフォント切替
  • upkcat パッケージ: 文字指定の kcatcode 操作

対応環境

パッケージ付属の説明書を参照。

ダウンロード

インストール方法については、 パッケージ付属の説明書を参照。

サンプル

以下に挙げるものの他に、 次のページに一部機能の使用例を紹介した。

日本語の PDF しおりの作成

(upLaTeX の場合は 「upLaTeX を使おう」 のページを参照。)

pLaTeX において hyperref パッケージと dvipdfmx を用いて和文文字を含むしおりや文書情報を含んだ PDF 文書を作る場合、 pdf:tounicode special を使う (つまりプレアンブルに

% (内部文字コードが sjis の場合)
\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
% (内部文字コードが euc の場合)
\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}

を書く)必要があった。

この作業を自動で行うのが \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 ウェアで用いても期待通りの結果にはならず、 場合によってはエラーになる。)

紙面のサイズを記録する(papersize special)

(この節の機能は、 bxbase パッケージ と共通である。)

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}
\usepackage{pxbase}
\recordpapersize
\begin{document}
お久しぶり、\TeX !
\end{document}

papersize special 命令対応の DVI ウェアはかなり多いが、 無論そうでないのもあるので、 やはり他の special 命令と同様の注意が必要である。

Babel 使用時にキャプションを日本語のままにする

(この節の機能は、 bxbase パッケージ と共通である。)

pLaTeX 上で Babel を使って日本語がメインの多言語文書を 作成するときに困る点の一つが、キャプションの文字列 (「参考文献」や「図」等)の言語の問題である。 例えば下の例では、表のキャプションの番号が “Table1” となってしまっている。

\documentclass{jsarticle}
\usepackage[Ot2,T1]{fontenc}
\usepackage[russian,english]{babel}
\begin{document}
\begin{table}[tbp]\centering
\caption{省略される前の単語をみる}\label{tbl:kolkhoz}
\begin{tabular}{cccc}\hline
日本語(?) & ロシア語 & 省略前の形 & 英字表記 \\\hline
コルホーズ &\Rus{kolhoz}&\Rus{kollektivnoe hozya\U{i}stvo}
&kollektivnoje khozjajstvo\\
ソフホーズ &\Rus{sovhoz}&\Rus{sovet{}skoe hozya\U{i}stvo}
&sovjetskoje khozjajstvo\\\hline
\end{tabular}
\end{table}
表~\ref{tbl:kolkhoz} をみてみよう。
コルホーズの省略前の形の前の単語は kollektivnoje、そう、
英語で collective、つまり「集団的」である。
一方、ソフホーズは sovjetskoje でここには sovjet (\Rus{sovet})
「ソビエト、国家」が見えてくる。
「コルホーズは colletive、ソフホーズは Sovjet」
と覚えておけばもう間違えないであろう。
\end{document}

通常、キャプション文字列の言語は、Babel で一番最後に読み込まれたもの (それが本文開始時に有効な「メインの言語」になる; この場合は english)になる。 Babel の言語オプションに「日本語」はないので、 キャプション文字列を日本語のままにしておくことができないのである。

キャプション文字列の変更の解除

これに対する解決策の一つに、「日本語の言語オプションを用意する」 ことが考えられる。 例えば、 japanese パッケージ(稲垣徹氏作)を利用して babel の読み込みを次のように変えればよい。

\usepackage[russian,english,japanese]{babel}

しかし、この方法で起こっていることは、「キャプション文字列を japanese オプションで用意したものに書き換える」 ということであるので、文書クラスが用意していた文字列がこれと異なる場合、 結局は「元の通り」にはなっていない。 それに、日本語の文書クラスではキャプション文字列の扱いが Babel がサポートしている言語(多くは西欧語)と異なることが多い (また扱いもクラス毎に異なる)ので、 この方法では上手くいかない可能性も残っている。

Babel の機能が日本語に関しては邪魔になる原因は次のようである。 日本語がメインの文書を作る場合は、 ほぼ必ず日本語用の文書クラスが用いられる (日本語文書のレイアウトが西欧語と大きく異なるから)。 当然、そこではキャプション文字列は既に日本語になっている。 このことを考えると、一番望ましいのは 「文書クラスの設定を何も変えない」ことということになる。

そこで pxbase パッケージ(または bxbase パッケージ) ではその為の機能を用意している。 次のように、プレアンブルで \bxcaptionlanguage{default} を指定すればよい。 これで表のキャプション中の番号は「表 1」となる。

\documentclass{jsarticle}
\usepackage[Ot2,T1]{fontenc}
\usepackage[russian,english]{babel}
\usepackage{pxbase}                   %+
\bxcaptionlanguage{default}           %+ これを追加
\begin{document}
\begin{table}[tbp]\centering
\caption{省略される前の単語をみる}\label{tbl:kolkhoz}
\begin{tabular}{cccc}\hline
日本語(?) & ロシア語 & 省略前の形 & 英字表記 \\\hline
コルホーズ &\Rus{kolhoz}&\Rus{kollektivnoe hozya\U{i}stvo}
&kollektivnoje khozjajstvo\\
ソフホーズ &\Rus{sovhoz}&\Rus{sovet{}skoe hozya\U{i}stvo}
&sovjetskoje khozjajstvo\\\hline
\end{tabular}
\end{table}
\end{document}

\bxcaptionlanguage の引数は以下のものが可能である。

  • default: キャプション文字列を文書クラス設定のものから変更しない。
  • main : メインの言語(最後に呼ばれたオプション)のものに変更する。
  • 有効な言語オプションの名 : その変後に変更する。

main は本来の Babel の動作と同じようにみえるが、 実は \bxcaptionlanguage にはもう一つの作用があるので同じにはならない。 以下ではその作用について説明する。

キャプション文字列の本文開始時の固定

Babel において \selectlanguage で言語を切り替えると次の例のように、 キャプション文字列の言語も追随して変わる。 (注意:これは故意に変な例を作っている。)

\documentclass{article}
\usepackage[Ot2,T1]{fontenc}
\usepackage[russian,french,english,ngerman]{babel}
\begin{document}
\selectlanguage{french}
\begin{figure}[!h]\centering
\fbox{\LARGE Voici une figur!}
\caption{in Franz\"osisch}
\end{figure}
\selectlanguage{russian}
\begin{figure}[!h]\centering
\fbox{\LARGE Vot risunok!}
\caption{\Eng{in Russisch}}
\end{figure}
\selectlanguage{english}
\begin{figure}[!h]\centering
\fbox{\LARGE Here is a figure!}
\caption{in Englisch}
\end{figure}
\end{document}

一見して便利なように見えるが、よく考えてみると、 一つの言語の中でこのようにキャプション文字列の言語が変わることは、 実際の文書ではまず起こり得ない。 多言語の文書といっても、そこには「メインの言語」があって、 全てのキャプション文字列はその言語のものになっているはずである。 例えば、英語がメインで所々にロシア語とギリシャ語が出てくる文書では、 図の番号は Fig.1, Fig.2, …… であって途中でロシア語に変わったりしないのが自然であろう。

そこで、\bxcaptionlanguage が使われた場合は、 本文の先頭(\begin{document} の場所) で一旦キャプション言語を決めた後は自動的には変更されないようにしている。 例えば、直前の例で \bxcaptionlanguage{main} を指定すると、図番号は全て ngerman のものになる。

まとめ

  • 日本語用の文書クラスで、キャプション文字列を日本語から変更しない:
    \documentclass{jarticle}  % 日本語用のクラス
    \usepackage[french,english]{babel}
    \usepackage{pxbase} % または bxbase
    \bxcaptionlanguage{default}
    
  • キャプション文字列を「メインの言語」のものに固定する。
    \documentclass{article}
    \usepackage[norsk,swedish,ngerman]{babel} % メインは ngerman
    \usepackage{bxbase}
    \bxcaptionlanguage{main}
    

[PR]OZFCカ߂:Õی̂ēƎ͂炩