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

PXmonja パッケージ
~日本語を等幅で組む~

PXmonja パッケージは、端末表示を模したいわゆる「等幅」出力、すなわち 「欧文を和文の半分の幅にしてベタ組」する機能を提供する。 Verbatim 出力でもそれ以外でも使用可能である。

概要

この文書およびパッケージにおいては、「等幅出力」を 「欧文を和文の半分の幅にしてベタ組」の意味で用いることにする。 コンピュータの画面上の文字出力がプロポーショナルフォントで行われるのが 普通になった現在においても、この意味での「等幅出力」 は様々な場面でなお使われ続けている。 例えば、コマンドシェル等のいわゆる CUI の画面、 あるいは専らプログラムソースを編集するためのテキストエディタでの 文字表示は等幅で行われるのが普通である。 従って、そのような環境を前提として作られた文書を出力するために、 LaTeX でも等幅出力が必要になる場合がある。

欧文のみの場合は、verbatim 出力により等幅出力が実現される。 ところが、pLaTeX の和文処理の場合、verbatim 出力は先に述べた意味での 「等幅出力」になっていない。 これに対して、verbatim 環境を改造して「等幅出力」 を実現する等の方策がこれまで採られてきたようである。 しかしこの方法は、verbatim に対する拡張と共存できず、 また verbatim でない等幅出力(つまり \ttfamily の日本語版) では使えないという欠点をもつ。

PXmonja パッケージでは、「等幅出力」のための和文と欧文フォントの組 (この字形はともに日本語用フォントのものを使う)を用意する。 従って、このフォントに切り替えることにより、 欧文用の等幅出力機能が和文でも等幅として機能させられる。

対応環境

  • TeX 処理系: pLaTeX2e / upLaTeX2e
  • DVI ウェア: dvipdfmx / dviout

ダウンロード

github のページから ZIP アーカイブをダウンロードできる。 (「Download ZIP」のボタンを押す。)

基本的な使い方

dvipdfmx を用いる場合は、 等幅出力に使う日本語フォントをパッケージオプションで指定できる。 (ファイル名で指定する。 TTC ファイルの場合は例えば font=:0:msgothic.ttc のようにする。) 既定(あるいは font=* 指定)では非埋込となる。

\usepackage[font=<フォントファイル名>]{pxmonja}

dviout ではこの指定は無効になり、マップファイル(dviout-pxmonja.map) で指定したものが常に使われる。

Verbatim 出力を等幅にする

パッケージを読み込むと、 verbatim 出力(verbatim(*) 環境と \verb(*) 命令) が等幅になる。

\documentclass[a4paper]{jsarticle}
\usepackage[font=ipag.otf]{pxmonja} % IPAゴシック(ver.003)を指定
\begin{document}
この \verb|\multicolumn| 命令は、\verb|<列数>| を1に指定した形でも
よく使われる。セルの連結はせず、セル内の文字の配置だけを変更する
場合に有用である。以下に例を示す。
\begin{quote}\small
%=============================== 例はじめ
\begin{verbatim}
\newcommand*{\Aligned}{\multicolumn{1}} % \Aligned{配置}{セル内容}
\begin{center}\small\begin{tabular}{c|l|l|l}
\hline                              % ヘッダ行 -------------------------
名称 & \Aligned{c|}{開発者} & \Aligned{c|}{\pTeX}   % ヘッダセルは
  & \Aligned{c}{動作環境}\\                         % 中央揃え
\hline                              % 本体 -----------------------------
{\TeX} Live  & Karl Berry(現在)  & 無 & UNIX、Windows   \\
te{\TeX}     & Thomas Esser        & 無 & UNIX            \\
Mik{\TeX}    & Christian Schenk    & 有 & Windows         \\
W32{\TeX}    & 角藤 亮             & 有 & Windows         \\
ptexlive     & 土村 展之           & 有 & UNIX            \\
\hline % Mac OS X は UNIX だ        % ----------------------------------
\end{tabular}\end{center}
\end{verbatim}
%================================ 例おわり
\end{quote}
\end{document}
注意: パッケージオプションに noverbatim を指定すると verbatim のフォントの変更は行われない。 この場合も、後述の \monjabox 等は使用できる。
参考: 上の例で pxmonja がないと次のような出力になる。
ちなみに、この Web ページ上の文書ソースのテキスト表示が 「等幅」になっているかは、ブラウザのフォント設定に依存する。

Verbatim 出力以外での等幅出力

  • \monjabox{<テキスト>}: ボックス(\mbox)に入れた形で <テキスト> を等幅で出力する。 (途中で改行できない。)
  • \begin{monja}~\end{monja}: 中身を等幅で出力する。 前後に改段落が入る。

注意: pTeX の仕様のため、段落の一部だけを等幅にしようとすると、 その部分をボックスに入れる必要が生じる。

詳しく述べると、等幅にするには、フォントを切り替えるだけでは不十分で、 和文間および和欧文間の空白の自動挿入を無効にする (\noautospacing\noautoxspacing) 必要があり、この設定は段落/ボックス単位でしか変更できないからである。 ただし、フォントを切り替えるだけの命令 \domonja も用意していて、以上の制限を踏まえて使えば有用な場合もある (例えば minipage 環境の先頭で実行する、等)。

Verbatim 拡張のパッケージと併用する

PXmonja パッケージの等幅の処理は、verbatim 出力機能には (フォント指定を除いて)手を加えていないので、 他の verbatim 出力用のパッケージと併用して、 そのパッケージの出力を和文等幅で行うことができる。

verbatim パッケージ

LaTeX 標準の tools バンドルの構成の一つである、 verbatim パッケージの \verbatiminput を使用した例。

\documentclass[a4paper]{jsarticle}
\usepackage[font=ipag.otf]{pxmonja}
\usepackage{verbatim}\pagestyle{empty}
\begin{document}
\begin{quote}\small
\verbatiminput{list.pl} % 文字コードは LaTeX 文書に合わせる
\end{quote}
\end{document}

(ファイル list.pl の内容)

open(IN, '<', 'user.tsv') or die;
while (<IN>) {
  chomp; @flds = split(m/\t/, $_);
  print <<END;
ユーザID        = $flds[0] 
氏名            = $flds[1]
氏名(ふりがな)  = $flds[2]
メールアドレス  = $flds[3]
PASSWORD        = $flds[4]
END
}

jsverb/okuverb/bxjsverb パッケージ

jsverb/okuverb パッケージは、奥村晴彦氏製作の 「新ドキュメントクラス」のアーカイブに含まれているパッケージ。 bxjsverb パッケージは jsverb を pLaTeX 以外でも使えるように私が改造したもの。 (ただし、pxmonja は (u)pLaTeX 専用である。)

\documentclass[a4paper]{jsarticle}
\usepackage[font=ipag.otf]{pxmonja}
\usepackage{jsverb}
\begin{document}
\begin{verbatim}
open(IN, '<', 'user.tsv') or die;
……(中略)……
}
\end{verbatim}
\end{document}

moreverb パッケージ

moreverb パッケージ(作者は Robin Fairbairns ほか) の \listinginput を用いた例。

\documentclass[a4paper]{jsarticle}
\usepackage[font=ipag.otf]{pxmonja}
\usepackage{moreverb}\pagestyle{empty}
\begin{document}
\begin{quote}\small
\listinginput{1}{list.pl}
\end{quote}
\end{document}
注意: moreverb が提供するタブ展開付の verbatim 出力機能 (verbatimtab 環境、\verbatimtabinput) を和文等幅出力と併用すると、 和文文字も 1 文字として数えるため、 タブ位置がずれてしまう。 次に述べる fancyvrb のタブ展開機能ではこの問題は起こらない。

fancyvrb パッケージ

fancyvrb パッケージ(作者は Timothy Van Zandt, Denis Girou, Sebastian Rahtz,Niall Mansfield)の提供する拡張 verbatim 出力機能 (Verbatim 環境、\VerbatimInput 命令、等)では、 出力に用いるフォントファミリを、オプションの fontfamily キーで指定可能である。 そこで、fontfamily=monja によって pxmonja の和文等幅フォントが使われるようにした。 タブ展開設定(obeytabs キー) も正常に機能するようである。 (fancyverb のタブ展開は文字数でなく文字幅によってタブ位置を計算しているため。) ただし fancyvrb の拡張機能が全て使えることは確認していないので、 出力結果に注意する必要がある。

\documentclass[a4paper]{jsarticle}
\usepackage[font=ipag.otf]{pxmonja}
\usepackage{color}
\definecolor{verbnum}{rgb}{0,0.1,0.8}   % 行番号の色
\definecolor{verbframe}{rgb}{0,0.6,0}   % 枠線の色
\usepackage{fancyvrb}
\begin{document}
\noindent プログラム:
\renewcommand{\theFancyVerbLine}% 行番号出力の書式
  {\textcolor{verbnum}{\footnotesize\sffamily\arabic{FancyVerbLine}}}
\begin{quote}
\VerbatimInput[formatcom={\small\narrowbaselines},% \narrow... は jsarticle の命令
  fontfamily=monja,% フォントファミリを 'monja' に設定
  numbers=left,frame=single,rulecolor=\color{verbframe}%
]{list.pl}
\end{quote}
\noindent テストデータ:
\begin{quote}
\VerbatimInput[formatcom={\footnotesize},fontfamily=monja,%
  obeytabs=true,tabsize=16,% タブ幅を 16 にしてタブ展開
  frame=single,rulecolor=\color{verbframe}%
]{user.tsv}
\end{quote}
\end{document}

ここで、user.tsv は次のようなタブ区切りテキスト(TSV) のデータファイルである。 (<TAB> はタブ文字を表す。)

102008001335<TAB>時間泥棒<TAB>じかんどろぼう<TAB>zr@vapor.net<TAB>H4ppy#73X1n'
992008000001<TAB>管理者1<TAB>かんりしゃ1<TAB>admin1@x-vulnerable.net<TAB>password