2019年6月17日月曜日

UTF-8で書かれた日本語テキストをPostScriptに変換する方法(2019)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
gnome-u2ps があったのですが開発が停滞しており、debianからはパッケージがREMOVEDになってしまい、その後……

・gedit からファイルに印刷する

geditでテキストを表示してファイルに印刷する、という方法があります。 CLI操作が苦手って方がよくやるようです。 psもpdfも作れるようですので、重宝している方も結構いらっしゃるのかも?

・paps (+nkf)

UTF-8で書かれたテキストファイルを pango ライブラリ を用いてレンダリングし、 PostScriptファイルにするフィルタです。 debian のパッケージにはUTF-8で書かれた多言語テキストファイルの例(/usr/share/doc/paps/examples/small-hello.utf8)があり、これを変換してみると便利さがよく分かります。

sample-hello.utf8 には日本語の半角カナが含まれるのですが、これがきちんと半角カナのまま変換されるのは、なかなか強力ですね。
レンダリングをpapsがやり、元となる文字列が何であったかという情報を含みません。そのため、ps2txtでテキスト部分だけ引っ張り出す、みたいなことも出来ません。pdfもにおいても、本文をpdfリーダーで取り出せないものが出来ます。

印字フォントを変更するには、fontconfig で認識しているものを使いますが、文字サイズの変更だけでも受け付けるようです。デフォルトは "Monospace 12"となっていますが、実体はシステムによって微妙に違うでしょう。

日本語のテキストファイルを印字する場合は nkf を併用します。nkf --guessを使って UTF-8(LF)などと返ってくるなら、そのまま変換すればよいですが、それ以外の場合はパイプを使ってしまえばよいでしょう。

DebianにもUbuntuにもパッケージがあり、これが一番安定しているようです。RHELのナレッジベースでも紹介されていますね。


・nkf + e2ps

 e2psにはバグが多いのですが、それでもdebianパッケージなどに入っていることから利用者が若干いらっしゃるようです。e2ps は EUC-JP を受け付けて PostScript を作るものなのでnkf -edなどとした変換が必要になります。

・nkf + a2ps-j (Perl版a2ps)

 日本語テキストファイルをPostScriptにするプログラムには他にも a2ps-j (a2ps perl版) がありますが、perl 4時代のスクリプトなので、MacPortsや各種BSDパッケージなどではパッチを当てたり、色々対応しながらやってらっしゃる方もおられるようです。

https://svnweb.freebsd.org/ports/head/japanese/a2ps/
https://www.uconst.org/blog/archives/437

 個人的に注目しているのが、a2ps-j をUTF-8対応させる、以下のブログのパッチです。開発者さんにおかれましては、このパッチのライセンスを再利用しやすいものに設定していただけますと、各OSでのパッケージとして採用が進むと思いますので、何卒よろしくお願いしたいです。

a2ps Japanese UTF-8 patch (日本語 UTF-8 パッチ)
http://zyushimatsu.cocolog-nifty.com/blog/2014/12/a2ps-japanese-u.html

 なお、GNU a2ps や GNU enscript は日本語がダメそうなままです。つらい。

2019年6月15日土曜日

nkfのマニュアルを読み違えていた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
nkfのマニュアルには、改行コードを変換するオプションの指定方法として、こんなふうに書かれています。
で、これを見て、 こうやって使うのかなあ、なんで -d が必要なんだろうなあ、と思っていたのですが…… という意味だったのですね。 nkf --helpで表示されるメッセージには、-d-cの記載がなく、 実際-Luに併記しなくても問題なく動作したので、あれ? と思ってソースコードを確認したら……
https://osdn.net/projects/nkf/scm/git/nkf/blobs/master/nkf.c 同じだこれ!? という話。 もしかしたら、こう書いてあれば誤解はなかったかもしれない… 他にも何箇所かありそうでつらい。

なお、この1文字オプションは他のものと併用できるので、 つまり、なんかわからんテキストファイルを、 Linux風(UTF-8, LF)にしたいならオプションは -wd とする、 Windows風(Shift_JIS, CRLF)にしたいならオプションは -sc とする、 みたいな形で覚えてしまってもいいのかもしれません。

2019年6月10日月曜日

array環境と角括弧(ブラケット)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
 もうarrayは行列の中に線を引くとか例外的なときにだけ使い、基本 matrix (amsmathパッケージ)にしたい、という話。

 行列の記述方法としての是非はちょっと置いておくとして、例えばこんな行列を組版しようとしました。  ところがこれはエラーになり、組版できません。  面白い? ことに、これはエラーになりません。  2 行目以降の 1 列目の要素、が、[ で始まっている場合、 エラーとなるようです。なにかのオプション記述と勘違いしているのでしょうか。

 対処方法は、\hspace*{0pt}[0] のように、 ゼロ幅スペースや空白文字を頭に置く、か、 \left[ 0 \right] などとすることです。
大きくならないことが分かっているのに \left[ - \right]を書くのもなあ、と思っちゃいますね。空白文字なら ~ で1文字ですが当然謎の空間が生まれてしまいます。\hspace*{0pt}もちょい長いですね。複数行あったとき投げ出したくなるでしょう。

 ちなみに amsmath パッケージの matrix 系の環境を使えば、これだけで済みます。
とても、楽。

 array環境は行列の中に縦横線を引くときにだけ使い、基本的には amsmath の matrix 系で済ませていいと思います。

余談:もしかしてtabularもダメかな? と思って試してみたらやっぱりダメでした。 ゼロ幅スペースを入れてエラーを回避していますが、お試しの際は \hspace*{0mm}を省いてみてください。 array のときと同様に、 Missing number, treated as zero.などと、 何かのオプションと勘違いしたエラーを出してきます。