2017年6月5日月曜日

e2psのpatchを作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
日本語を含むテキストファイルを PostScript形式に変換するプログラムの一つに、 e2ps があります。LinuxのディストリビューションやFreeBSDなどにもパッケージがあったりしますね。

オリジナル: http://wtpage.info/wtseries/unix.html#e2ps
Debian: https://packages.debian.org/ja/stretch/e2ps
FreeBSD: http://www.freshports.org/japanese/e2ps/

で、色々あってこれを使ってみたのですが、どうにも動きがおかしい。
というわけで patch を作ってみたわけです。
https://gist.github.com/taraijpn/ea10ff9e908befafab7cff719f26dd20

どれくらい需要があるのか分かりませんが、とりあえず公開しておきます。

何がおかしかったかは以下の通り。

1)出力ページ枚数のカウントがおかしい。
2ページ以上になっても「One page was outputed」になる。1ページのときは「 1 pages were outputed.」って何故に複数形??

2)複数ページを出力するPostScriptなのに、何故かEPSだと言い張る。
おかげで psset に出来上がったファイルを渡すと、(pssetが内部で呼んでいる) fixpsから「fixps: DSC broken.  gs will be asked a full rewrite of the file.」と言われ、正しいPostScriptと認識されず、きちんと動かない。

3)内部で持っている用紙のサイズ(ポイント数)がおかしい。
なんでこんな数値にしたんだろう。複数面付けするときの計算の事情?

4)オリジナルのソースコードで何故かコンパイルが通らない(うちでだけ?)
ps-font.c に、gsFonts という静的配列の宣言があるのですが、さすがにこれはコンパイル通らないんじゃあ……でもFreeBSD portsmonでは何故かビルド出来てる……何故だ……
http://portsmon.freebsd.org/portoverview.py?category=japanese&portname=e2ps
※FreeBSDの ports では、ps-font.c の内容を修正するための sed コマンドが Makefile 側に書かれていました。どおりで files/ の中を見ても分からないわけだよ!
buildしたログで気づきました orz

===>  Patching for ja-e2ps-4.34
===>  Applying FreeBSD patches for ja-e2ps-4.34
/usr/bin/sed -i.bak -e '/Times-Roman$/,/^Gothic-Medium.Katakana$/{s,$,\\,;}' /usr/ports/japanese/e2ps/work/e2ps-4.34/ps-font.c


2016年10月22日土曜日

bash on ubuntu on Windows とMintty/wsltty

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
bash on ubuntu on Windows を日本語環境( ja_JP.UTF-8 ) で使いたいなら、Mintty/wsltty を使うと幸せかも知れません。という話。

Big Sky :: Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。
http://mattn.kaoriya.net/software/bow/20160824234928.htm

で紹介されている内容が、今は
wsltty: https://github.com/mintty/wsltty
インストーラーを使うだけでほぼ出来上がりますので、導入がぐっと楽になっています。
動作比較はこんな感じ。



左下が Mintty/wsltty をインストールし、 Bash on UoW in Mintty を実行してvimを起動した場合。
右上は標準の端末からvimを起動した場合。どちらもVLゴシックをフォントに指定しています。
w3mでgoogleを見た場合と合わせてみると、Minttyのほうが日本語表示の崩れが少ないことが分かります。素晴らしい。



端末上で開いているemacsに、Windowsの日本語入力機能を用いて日本語を入力することもできます。テキストのコピペも出来そう?



さらに、sixel にも対応しているので、こんな表示も出来ますね。

( sixel については、『Sixel Graphicsを活用したアプリケーションの御紹介』


gnuplot 5.0.5 を ./configure --with-bitmap-terminals で make すると、terminal として sixel を選択出来るようになります。描画範囲の背景は白で塗りつぶさないようなので、端末背景は白ないし明るい色にしないと綺麗に見えないのがネックでしょうか。暗い背景だと線やラベルが見えません。



terminalに sixel がない場合は、libsixel 内にある img2sixel を用いて、png画像などを sixel で出力してやればよいでしょう。右側がその例なのですが、outputにコマンドを指定して、フィルタとして使う場合、 gnuplot が終了しないと標準出力に書き出されたsixel画像が表示されませんので、ちょっと不便かも知れません。

libsixel は、ubuntu 14.04LTS (trusty) ではパッケージ化されていないので、自力導入する必要があるのがやや面倒ですね。

sixel 対応は、Windows側でXサーバプログラムを用意するなど、いろいろ面倒な bash on UoW にとって、古くて新しい解決方法になってくれそうな気がします。

それにしても bash on Ubuntu on Windows, trusty のサポート期限が2019年までなので当分これでいくと思うんですが、次はどうするつもりなんだろう。 systemd 対応が立ちはだかってる気がするんだけど、なんとかするのかな。

2016年7月1日金曜日

dvipdfmx で作成した pdf に印刷制限等をかけるとファイルが壊れる?

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Windows 環境で LaTeX を扱っているのですが、 dvipdfmx で作成した pdf ファイルに、Adobe Acrobat Pro DCで権限パスワードを付与し、印刷制限をかけて保存すると、そのpdfファイルを Acrobat で開くことが出来なくなる。google docsやsumatra pdf readerなら開くことが出来る。……という謎めいたトラブルに見舞われました。

権限パスワードを付与して印刷、コピー、編集の制限をかける方法はこちら。
https://helpx.adobe.com/jp/acrobat/using/securing-pdfs-passwords.html

理由は分かりませんが、解決方法としては、
『dvipdfmxで作成したpdfファイルをAdobe Acrobat Pro DCで開き、その他の形式で保存→最適化されたPDFで別名保存してから、そのファイルを開き直して制限をかける』ということで落ち着きました。

dvipdfmxで作成したpdfファイルを直接Acrobat で操作しないほうがいい、ということなのでしょうか。不思議ですね。例によって細かい追究はしていません。

dvipdfmx の機能で直接制限つきのpdfを作ろうとしたのですが、
This is dvipdfmx Version 20160307 by the DVIPDFMx project team,
modified for TeX Live,
an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks.
このバージョン(w32tex)ではうまくいかなかった……残念。