2019年5月13日月曜日

e2ps の修正パッチを一段落させた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
 Linux などで日本語テキストファイルをPostScript形式に変換するソフトウェアの一つに e2ps があるのですが、いろいろバグが多くて困っており、一昨年くらいからちまちまと直したりしていました。
http://taraijpn.blogspot.com/2017/06/e2pspatch.html

 とりあえず Debian BTS で公開されているバグを直すところまで出来たので改めて紹介します。修正点は以下の通り。
  • フォントリストの文字型配列がコンパイル不能な書き方だった点を修正。
    • 各ディストリビューションで対応されています。
  • 用紙サイズのポイント数を PostScript の仕様で使われている数に合わせて修正。
    • 一部ディストリビューションで対応されています。
  • 生成される PostScript が EPS だった問題などを修正。
    • これでようやく fixps に怒られずに済みます。
  • 出力したページ数が誤っていた問題を修正。
    • ja_JP.EUC-JP 環境以外で動いているときに起こる問題でした。
  • ヌル文字から始まるテキストファイルが与えられるとクラッシュする問題を修正。
    • これは  https://bugs.debian.org/715852 で報告されていたものです。ヌル文字しかない、もしくはヌル文字から始まる(という意地の悪い)テキストファイルを印刷しようとすると起こる問題です。
  • 複数のファイルをまとめて変換すると、他のファイルの印刷末尾に余計な文字列が含まれる問題を修正。malloc を全て calloc に書き換えた。
    • e2ps README.euc README.english などとして出来たファイルを見たとき気づきました。環境依存?
  • Letterサイズで2面付け(-p2, -l2)を行うと用紙をオーバーする問題を修正。
    • 用紙のアスペクト比を維持するか、アスペクト比を歪めて紙面を広く使うか、どちらか悩んだ結果、前者を取りました。本来であればマージンを調整すべきところなのですが、それは全ての用紙サイズで考えないといけないことなので棚上げ。
  • PostScript の作者 ( %%Creator: ) は e2ps であるものとした。
    • CREATOR は help で使ってたので手を入れました。

 以上の内容を、patch1 として公開しました。(2019/5/14 patch1タグを打ってあります。
https://gist.githubusercontent.com/taraijpn/ea10ff9e908befafab7cff719f26dd20/raw/9a4a6fd502958a0e87db364174cbc331d07055be/e2ps-4.34.patch


 実はもう少しやらないといけないことがあって、
  • 変数の型を整理する。
    • unsigned char を使わないようにする。そもそも string.h で読んでいる関数と合わず warning が出ます。
    • unsigned char や signed char といった型は使わないようにして、コンパイラの警告をなくす。
  • 読み込めるファイルサイズを制限する。(2GB程度の予定)
    • unsigned long を size_t に直したらえらいことになったので。
 機械的な置き換えで問題ないかと思ったのですが、そんなに甘くなかった。sjisの変換に失敗する、とか、READMEにある他アーキテクチャ対応に悪影響が及びそうな気がするので、ちょっと止めてあります。とりあえず patch1 の上流での採用を目指したいところ。

 なお上流への連絡は、WebページにあるCGIで掲示板への書き込みやメールの送信を試みましたがいずれもエラーで動かず、2015年に公開されていたWindowsのプログラムにあるreadmeにメールアドレスが掲載されていたので、そこに送っています。果たして無事届いていますでしょうか……

bloggerにログイン出来なかった…

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
しばらく使っていなかったのですが、一般ユーザー向けgoogle+との兼ね合いかなにかで、2019年4月以降、 bloggerへのログインがうまくいかない場合が起こるようです。

ログインをクリックして自分のgoogleアカウントを選択しても、
https://www.blogger.com/about/?hl=ja
何度もこのログインページに戻される、という状況。

で、解決方法が以下。
https://support.google.com/blogger/thread/3471576?hl=en

ブラウザから google のサービスにログインしている状態で、
https://www.blogger.com/switch-profile.g
にアクセスし、blogger用のプロフィール(要は名前?)を付けなおすことで、自分のblogger投稿ページに進むことが出来、それ以降は自分のbloggerページからログインすることが出来るようになってます。

意外と見つからなかった…

2018年6月21日木曜日

latexmk の設定ファイルとうまく付き合う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
 latexmk にオプションとして -pdf などを与えるのではなく、主となる .texファイルが存在する作業ディレクトリに latexmkrc ファイルを置いたらどうだろう? という話。

 latexmk では、LaTeX文章のpdf化の手順を選択する方法として、latexmkrc 設定ファイルに変数 $pdf_mode を設定するか、 latexmk にオプションを与える方法があり、オプションのほうが優先されます。
 このオプションが一部のエディタや拡張機能で当然のごとく設定されていると、自分の望むpdf化手順と合わないとき、トラブルの原因となります。
†VisualStudio Code + LaTeX Workshop など。

 主となる .texファイルが存在する作業ディレクトリで、
% latexmk main.tex
とだけ入力すれば .pdf まで出来上がる、というのが理想的な動作ですし、エディタから呼び出すときもトラブルが減るのではないかな? と思うわけです。

 latexmk を呼び出す側には極力オプションを与えず、latexmkrc だけで動作を切り替えることは出来ないでしょうか? 実は、latexmkrc には、以下のように読み込み順が存在します。
       1) The system RC file, if it exists.
       2) The user's RC file, if it exists.
       3) The  RC  file  in  the current working directory.  This file can be named either "latexmkrc" or ".latexmkrc", and the first of these to  be found is used, if any.
       4) Any RC file(s) specified on the command line with the -r option.

 で、latexmkrc の $pdf_mode の数値、 pdf化の手順、 latexmk に与えるオプションとの関係は、以下の通りになります。
  • $pdf_mode = 0 と書くと、pdf を作りません。 (-pdf-)
    • $latex の確認が必要です。
    • $xelatex で .xdvだけを作る方法を確かめていません。-xelatex -pdf- とオプションをつけても、$latex が使われるような…? 
  • $pdf_mode = 1 と書くと、pdflatex を使うことを表します。 (-pdf)
    • $pdflatex の確認が必要です。
  • $pdf_mode = 2 と書くと、tex→ dvi → ps→ pdf とたどります。 (-pdfps)
    • $dvips の確認が必要です。
    • $ps2pdf の確認が必要です。
    • $latex の確認が必要です。
  • $pdf_mode = 3 と書くと、tex→ dvi → pdf となります。 (-pdfdvi)
    • $dvipdf の確認が必要です。
    • $latex の確認が必要です。
  • $pdf_mode=5だと xelatex, xdvipdfmx (-pdfxe ) を使うようです。 上記ドキュメントにはありませんが、 $pdf_mode=4 で lualatex (-pdflua ) を使うようです。
  • $pdf_mode={4,5} (-pdflua, -pdfxe も?)については、古い latexmk には含まれていないようです。 例えば Debian 9.x の latexmk (Ver. 4.41 texlive2016 相当?) には存在しません。texlive2018 の latexmk (Ver. 4.55) なら含まれています。
 というわけで、
  1. ~/.latexmkrc にはツールの設定だけ書いておく。
  2. 作業用ディレクトリ/latexmkrc には $pdf_mode の数値だけ書いておく。
    • ~/.latexmkrc で予め設定しておいてもよい。
    • platex や uplatex を使い分けたいなら、さらに $latex などを書いておく。
  3. latexmk を使うときは -pdf などのオプションを付けない。
という方針は有りなんじゃないかな、と思いました。

 ドキュメントごとにコンパイル方法やツールを変える、というのは、なかなかしんどいと思いますが、様々な LaTeX 環境を体験したい場合や、psfrag など dviware が決め打ちになってしまうパッケージを使う場合は、どうしても避けて通れませんね。(避けたいですけど…)
 そんなときでも、作業用ディレクトリの下に latexmkrc を書いておくという手段は、作業手順をメモする効果もあるので有効かな、と思ったのでした。