ようこそ、の後で画面が真っ暗

Windowsの話。久しぶりにWindowsを起動しようとしたら、「ようこそ」というログイン画面でパスワードを入れた後、画面が真っ暗になって、マウス・カーソルだけが見えるという状態。ううむ、これは初めてだ。というか、前回Windows使ったのは、Sublime Textの設定とかやってたときで、特段変わったことはしてないと思うのだが。

とにかく、何とかせねば。Macの方で検索。「Windows7 ようこそ 真っ暗」で検索すると、出るわ出るわ、笑っちゃうくらい同じ症状の人が居る。もっとも、症状は同じでも、解決策は一つではないようだ。

とりあえず、システムの復元というのを試みた。セーフモードで起動。これは成功。スタートメニューから順に掘っていって、システムの復元にたどり着く。最新で2017/01/10だったが、そこまで戻ることに。時間掛かったが、無事に復旧したようだ。良かった良かった。

しかしである。パソコン1台だと、こういうときどうしようもないな。あ、そうか、セーフモード+ネット、という選択肢もあったか。それが上手く起動すればだが。

Sublime Text 3でLaTeXToolsに変更を加えて日本語pLaTeX文書の組版(Windows版)

いろいろやってみたが、一番ポピュラーなLaTeXToolsを使う方法をメモするのを忘れていた。

LaTeXToolsに変更を加えるには、Packages/User にLaTeXTools.sublime-settings という自分用の設定ファイルを作る。これは、Sublime Text 3からLaTeXToolsの設定メニューに入ると作成用のメニューがあるので、それを選ぶと自動的に作られる。変更はこちらに行い、本体はいじらない。変更箇所としては、TeXLiveをインストールした場所の指定、TeXのdistroとしてMikTeXじゃなくてTeXLiveを選んでいること、そして、日本語LaTeXを使うために、command に変更を加える。

まずは、TeXLiveの場所、PDFのPreviewerとしてSumatraPDFを設定、などなど。

// ------------------------------------------------------------------
// Platform settings: adapt as needed for your machine
// ------------------------------------------------------------------

	"osx": 	{
		// Path used when invoking tex & friends; MUST include $PATH
		"texpath" : "$PATH:/Library/TeX/texbin:/usr/texbin:/usr/local/bin:/opt/local/bin"
		// Path to PDF viewer, if needed
		// TODO think about it. Also, maybe configure it here!
	},


	"windows": {
		// Path used when invoking tex & friends; "" is fine for MiKTeX
		// For TeXlive 2011 (or other years) use
		// "texpath" : "C:\\texlive\\2011\\bin\\win32;$PATH",
		"texpath" : "C:\\texlive\\2016\\bin\\win32;$PATH",
		// TeX distro: "miktex" or "texlive"
		"distro" : "texlive",
		// Command to invoke Sumatra. If blank, "SumatraPDF.exe" is used (it has to be on your PATH)
		"sumatra": "",
		// Command to invoke Sublime Text. Used if the keep_focus toggle is true.
		// If blank, "subl.exe" or "sublime_text.exe" will be used.
		"sublime_executable": "",
		// how long (in seconds) to wait after the jump_to_pdf command completes
		// before switching focus back to Sublime Text. This may need to be
		// adjusted depending on your machine and configuration.
		"keep_focus_delay": 0.5
	},

	"linux" : {
		// Path used when invoking tex & friends; MUST include $PATH
		"texpath" : "$PATH:/usr/texbin",
		// Command to invoke Python. Useful if you have Python installed in a
		// non-standard location or want to use a particular version of python.
		// Both Python2 and Python3 are supported, but must have the DBus bindings
		// installed.
		"python": "",
		// The name of the ST2 or ST3 executable. On Ubuntu, both subl and sublime-text are
		// available for ST2; adjust as needed for other platforms, and for ST3
		"sublime": "sublime-text",
		// How long to wait after evince or okular has launched before sending a sync message
		// in seconds, floating point; choose 2.0 or 3.0 on a slower machine, 0.5 on a fast one
		// Note: only tweak this if sync after launching the PDF viewer does not seem to work,
		// or if the PDF viewer opens instantly and you don't want to wait.
		// Default: 1.5 (works on my MBP4,1...)
		"sync_wait": 1.5,
		// Command to invoke Sublime Text. Used if the keep_focus toggle is true.
		// If blank, "subl" or "sublime_text" will be used.
		"sublime_executable": "",
		// how long (in ms) to wait after the jump_to_pdf command completes
		// before switching focus back to Sublime Text. This may need to be
		// adjusted depending on your machine and configuration.
		"keep_focus_delay": 0.5
	},

次に、builder settings のところに、latexmk を呼び出すときに使う command を定義する。これで完了。

	// OPTION: "builder_settings"
	// Specify builder-dependent settings and preferences
	// Possible values: see README or documentation provided with
	// third-party build engine.
	// Builder setting can be general or OS-dependent

	"builder_settings" : {

		// General settings:
		// See README or third-party documentation
		"command" : ["latexmk", "-cd",
			"-e", "$latex = 'platex %O -no-guess-input-enc -kanji=utf8 -interaction=nonstopmode -synctex=1 %S'",
			"-e", "$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'",
			"-e", "$bibtex = 'pbibtex %O %B'",
			"-e", "$makeindex = 'pmendex %O -o %D %S'",
			"-e", "$dvipdf = 'dvipdfmx %O -o %D %S'",
			"-f", "-norc", "-gg", "-pdfdvi"],

		// (built-ins): true shows the log of each command in the output panel
		"display_log" : false,

		// Platform-specific settings:
		"osx" : {
			// See README or third-party documentation
		},

		"windows" : {
			// See README or third-party documentation
		},

		"linux" : {
			// See README or third-party documentation
		}
	},

Sublime Text 3からlatexmk経由でpLaTeXのビルドとプレビュー(Windows版)

表題が長くなったが、内容はこの通り。Windows上でSublime Text 3というエディター(文書編集プログラム)を使い、その中からTeXLive収録のlatexmkというPerlスクリプトを呼び出して、日本語LaTeX(今回はplatex)文書をPDFに組版し、SumatraPDFで結果をプレビューする、というもの。

latexmkには .latexmkrc という環境設定ファイルがあり、それを$HOMEに置いておけば、自動で読みに行くらしいのだが、今回はそれは使わずに、直接にコマンドラインからオプションを渡す方法を試みた。ちなみに前回行ったのは、Sublime Text 3から直接にplatex, dvipdfmx, SumatraPDFを呼び出す単純なもの。latexmkは、bibtexの処理、必要な回数だけのlatex処理など、いろいろ自動でやってくれるらしい。実は、個人的にはあんまり必要としていないんだが、そっち方面は。さらに言えば、Sublime Text 3からlatexmkを起動させるにはLaTeXToolsというプラグインを用いるのが便利で、その使い方がよく紹介されているのだが、そのままでは日本語LaTeXには対応していないので、修正が必要。それもやってみたのだが、別にLaTeXToolsに依存しなくてもできるはずだ、と始めたのが今回の作業。

前置きが長くなった。一番の難関は、latexmkに”-e”オプションでPerlスクリプトを正しく渡すにはどうするか、ということ。ダラー$とか引用符とか、二重引用符とかバックスラッシュとか、どのステップでどういう文字列になって、最終的にどの形でlatexmkに渡されることになるのか、そこが分からなくて、エラー続きだった。結局、つぎのようにすれば上手くいった。

{
	"cmd" : [
		"latexmk", "-cd",
		"-e", "\\$latex = 'platex %O -no-guess-input-enc -kanji=utf8 -interaction=nonstopmode -synctex=1 %S'",
		"-e", "\\$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'",
		"-e", "\\$bibtex = 'pbibtex %O %B'",
		"-e", "\\$makeindex = 'pmendex %O -o %D %S'",
		"-e", "\\$dvipdf = 'dvipdfmx %O -o %D %S'",
		//"-e", "\\$pdfmode = 3",
		"-e", "\\$pdf_previewer = 'SumatraPDF -reuse-instance %O %S'",
		"-f", "-norc", "-gg", "-pdfdvi", "-pv",
		"$file"
	]
}

ポイントは $latex などのダラー付きの変数に対して、バックスラッシュ(\)を2重に付けるということ。これが分からなくて苦労した。

Sublime Text 3での自前LaTeXビルド(Windows版)

Sublime Text 3にはLaTeXtoolsという強力なパッケージがあるのだが、そのままでは日本語版のplatexでの組版ができない。そこで、いろいろ修正を加えることになるのだが、自分の場合、複雑な処理は必要とせず、単に platex, dvipdfmx, preview すればよいから、もっとシンプルなビルド・システムでよいのだ。むしろ、場合によってはplatexの部分をuplatexに変えたりすることもあるから、その時に応じて適当に選べるようになっていて欲しい。残念ながら、LaTeXtoolsはそうはなっていないようだ。

ということで、あちこち検索しながら試行錯誤。Windowsの場合は、次のようにすれば上手く行った。なお前提として、パスは通してある。また、将来的には Linux, Mac OSX を含めて一つのファイルにしたいので、OS別の処理のため、”windows” : {…} と括ってある。

Tool, buildsystem, new-buildsystemと進むと、untitled.sublime-build なるファイルが作られ、開かれる。そこで、次のように書いて、適当な名前で保存する。今回は、my_platex2pdf.sublime-build とした。

{	
	"windows" : {
		"shell": true,
		"cmd" : [
			"platex", "$file", "-interaction=nonstopmode" ,"&",
			"dvipdfmx", "$file_base_name.dvi", "&",
			"SumatraPDF", "-reuse-instance", "$file_base_name.pdf"
		]
	}
}

Windowsの場合、空白を含むコマンドはダメらしく、上のように、文字列を並べるようにする。それから、複数のコマンド、つまり、platex, dvipdfmx, SumatraPDF を順に起動させるのだが、それらは、”&” で区切るとよいようだ。最後に、これで嵌ったのだが、”shell”: true というのを付けないと、platex のみで、残りが実行されない。どういう訳か分からないが。

Windowsの修復

しばらくほったらかしにしておいたWindows7を再開させようとすると,あれ?画面が真っ黒。マウスのカーソルだけは動くが,あとは反応なし。画面だけ死んでるわけでもなさそうだし。ううむ。

強制的に再起動させたが,ログインはできるものの,「ようこそ」表示のあと,やはり画面が真っ黒になり,マウスのカーソルのみ表示されるという状態。これは経験がない。困った。

あれこれ検索した結果,とりあえずファイルのバックアップだけは取ることにした。強制終了させて,Ubuntuを起動(^^;)。デュアルブートがこんなときに役立つなんて。USBのHDDを接続し,Windowsのファイルシステムにアクセスし,バックアップを取る。およそ200GBほど。50分くらいかかった。転送速度は80MB/sec くらいだったが,これってUSB3.0なんだろうか。うちのMacより速いなあ。

さて本題。セーフモードで起動。幸いにセーフモードだと起動できた。ネットの情報だと,セーフモードでもダメという記載があったので心配していた。スタートメニューからアクセサリー,システムツール,システムの復元と進む。最初は2日前の2016/08/18に戻したのだが,真っ黒画面のまま。再起動させて,再びセーフモードで起動し,今度は2016/08/08まで戻した。ログイン後,少しの間,画面が黒くなったので,ダメか〜と落胆したが,10秒くらい経って,いつもの画面になった。とりあえず安堵。

しかし,Windowsってどうしてこうなんだろう。

WindowsにSublime Text 3をインストール

Macで愛用しているSublime Textだが、Ubuntu, Windows版もあるらしい。まずはWindowsにインストールしてみた。

実はMacで使っているのは、Sublime Text 2というバージョン。同じのにするか新しいのにするか迷ったが、新しい方にした。ベータバージョンみたいだが。また、ポータブル版もあったので、64bitのポータブル版 Sublime Text 3を選びインストール。

インストール直後の作業をメモ。

  • Package Controlを入れる。本家サイトにあるインストール用のコードをコピーする。コンソールを表示させ、コマンドラインに貼り付け、エンターを押して入力。多分、ここが一番心理的ハードルが高い。
  • 日本語をインライン入力できるようにする。Package ControlからInstall Packageを選び、さらに IME Supportというのを選択すればよい。
  • メニューの日本語化。これはなくてもよいが。というか、Macでは英語メニューのまま使っているのだが。Package ControlからInstall Packageと進み、Japanizeを検索。これで、トップメニューが日本語化する。サブメニューも日本語化したい場合は、Sublime Text 3/Data/Packages/Default というフォルダーを作り、その中に、Sublime Text 3/Data/Packages/Japanize フォルダーにある6個の *.jp ファイルをコピーし、さらに、拡張子の .jp を削除する。こうすると、拡張子は .sublime-menu となって有効になる。
  • フォントの設定。Sublime Text 3/Data/Packages/User/Preferences.sublime-settings ファイルを編集する。”font_face”: “SourceHanCodeJP-Regular”, “font_size”: 12, を書き込む。

とりあえず、こんなとこかな。LaTeX用のプラグインはまた後で。

ScanSnapの白黒2値読み取りについて

文字主体の本はできれば白黒2値,それが読みにくいなら16階調グレースケールにすることを念頭において,白黒2値化について実験中なのだが,とりあえず,ScanSnap IX500 の白黒2値読み取りについてのメモ。

300dpi カラー読み取りの画像を,赤チャンネル抽出によるグレースケール化,レベル補正,白黒2値化したものと比較すると,直接ScanSnapから300dpi 白黒でスキャンした画像の方が,品質が高そうに思える。

これが,300dpi カラーで読み取ったままの画像。

300dpiカラー圧縮度1

全体的に紙焼けがあるものの,文字は読みやすく,ファイルサイズを気にしなければ,実用上は問題ない。これを1つ前の日記に書いたように,画像梱包,Ralpha, XnView を用いて白黒2値にしたものが,次の画像。

300dpiカラー圧縮度1から白黒2値に変換

紙焼けも除去されていて,まずまずだと思う。ところが,ScanSnapから直接300dpi 白黒で読み込んだ次の画像と較べてみると,明らかに後者の方が品質がよさそうなのである。

300dpi白黒

紙の左端の方に紙焼けの影響が残ってはいるが,それ以外は手動で白黒化したものよりも綺麗というのが,納得の行かないところ。そんなに素晴らしいアルゴリズムなのか?

ところが,画像のサイズを見ると,この白黒画像は縦横ともに300dpiカラーの2倍あるのだ!これはどういうことだろうか。想像だが,300dpiで読み取ったものを2倍に拡大して,それから白黒2値化しているのではないだろうか。そう言えば,スーパーファインについては 300dpi (白黒は600dpi相当) と不思議な事が書いてあった。600dpi相当というのは,そういうことなのかもしれない。

そこで,実験。300dpiカラーで読み取った画像に対して,2倍に拡大(アルゴリズムはLanczos)した後に,白黒2値化を手続きを施してみた。それが次の画像。

300dpiカラー圧縮度1を600dpiに拡大したのち白黒2値に変換

紙焼け除去のためのレベル補正とかの影響を除けば,ScanSnapの300dpi白黒とほぼ同じ品質だと思う。ファイルサイズも,CCITT FAX G4圧縮のTIFFファイル同士で,ほぼ同じであった。

というような訳で,断言は出来ないが,ScanSnapが生成する白黒画像は,おそらくは2倍にリサンプリングしたのちに2値化しているのだろうと思う。だから,白黒とカラーのどちらか一方を選ぶとすれば,フルカラーの方が良いかも。白黒2値化はあとでソフトウェア的に行えるのだから。まあ,それが面倒なら白黒でも悪くはないのだが。

スキャンしたPDFの後処理

以前から懸案ではあったのだが,Windowsマシンも買ったことだし,画像処理関係のツールをいろいろ集めて実験してみた。実は,Mac上でもImageMagickなどで実験していたのだが,Windowsだと専用のツールが豊富にあるようなので,それがWindowsマシン購入の理由の1つだったりするのだ。

自分でスキャンするものについては,スキャンの段階で白黒2値とか選べるが,Bookscanなどのスキャン代行業者に依頼したものは,そういうわけにもいかず,黄色く紙焼けした本など,そのまんまカラーでスキャンされているものが,けっこうある。それをきれいに脱色して,白黒2値あるいは16階調グレースケールあたりに変換するのが目的である。

いくつか試してみた結果,画像梱包,Ralpha Image Resizer, XnView の3つを使って,とりあえず目的を果たした。XnViewはMac版やLinux版もあるが,あとの2つはWindows専用のプログラムである。

まず,画像梱包(pic2pdf)を使って,PDFの画像を抽出する。ソフトの注意書きには,画像梱包でPDFにしたものに対してのみ抽出可能とあったが,スキャンした本のPDFでも大丈夫のようだった。要するに,複雑な構造のPDFもあるから,それは無理ということなのだろう。本をスキャンして作ったPDFは,たいていの場合,単にJPEGのデータにヘッダー(XMLとか)を付加しただけであるから,問題ないのだと思う。抽出のスピードも非常に速い。AcrobatでJPEG出力するよりもずっと速いのだ。しかもJPEGのヘッダーを外すだけなので,基本的に無劣化で画像が取り出せるらしい。

次は,Ralpha Image Resizer を使っての画像処理。紙焼けは,周辺部がとくにひどいので,文字がないことを確認してから,上下左右をトリミングする。そして,同じ分量だけ付け加える。こうすると,紙の周囲が真っ白になる。次に,2倍に拡大する。これで,600dpi相当にオーバーサンプリングしたことになる。最後に白黒2値化するので,解像度を上げておきたいから。続いて,トーンカーブを調節する。ここのところは,ImageMagickのlevel処理のように,high, low, gamma の3つで簡単に処理しても良いと思うのだが,まあ,似たようなもの。プレビュー出来るので,結果を見ながら調節できる。最後に,赤チャンネルのみを抽出してグレースケールにする。

このあと,白黒2値でCCITT FAX G4圧縮のTIFFにしたいのだが,Ralphaでは白黒2値というメニューがない。グレースケールで色数を2色にすれば,白黒2値と同じなのかもだが,それでもJPEGになってしまうのは嫌なので,Ralphaだけで済ますのはあきらめた。結局,Ralphaでは,グレースケールにしてPNGとして出力させて終了。

Ralphaで出力したPNGファイルをXnViewで一括変換する。一気に白黒2値とどれくらい違うが疑問だが,段階を踏むことにして,グレースケールの色数を4bit, 3bit, 2bitと下げていき,最後に1bitつまり白黒2値にする。白黒2値にする際には,閾値(しきいち,threshold)というパラメーターがあるはずなのだが。何故か見当たらない。ここが謎なのだが,ともかく白黒2値にする。出力はCCITT FAX G4圧縮のTIFFファイルとする。

最後に,再び画像梱包を使う。解像度を600dpiと指定して,PDFに固める。解像度の指定をしておくと,Acrobatで見るとき,100%でもそれほど巨大にならないし,それに,表紙と裏表紙(これはPDFから抽出したままで,2倍にしていない)を後からAcrobatで加えるとき,同じ大きさで表示されるので,ちょうど良い。

以上で作業は終了。これをバッチ処理できるスクリプトがあればよいのだが。書式は,
mypdf2pdf hoge.pdf -level high low gamma -color 1-2 143-144 -resize 2 hoge2.pdf
とかいった感じで。

自炊事始め2

裁断の要領や注意点(紙がくっついてないかを、くどいくらいにチェックすること)も分かってきたので、いよいよハードカバーの書籍の解体・裁断・スキャンをやってみた。

少々ためらったが、シュヴァルツの解析学(全7巻)を遡上に。まずは、第7巻から。魚をさばくのに比べればずっと楽。(というか、やったことないから、想像だが。) 本体と表紙をくっつけているガーゼ(?)のような部分があるので、カッターで真っ直ぐに切ると、繋ぎ目がきれいに外れるようだ。上手くやると背表紙に傷をつけることなく、ハードカバーだけがパカっと取れる。まあ、どのみち廃棄するのではあるが、中には裁断後も残す本もあるだろうから。

裁断機Durodex 200DX, OFLAカッターハイパーH型, PLUS カッティングマット, アルミ直尺アル助

道具は、カッター、カッティングマット、定規、そして裁断機。

ハードカバーを解体・裁断 (シュヴァルツ 解析学7)

上で書いたように、脇の部分(?)というか、繋ぎ目を切断してハードバウンドを外す。読み取りはまだ試行錯誤中だが、網掛けの挿絵のない数学書の場合、白黒が一番読みやすいと思う。ScanSnapではPDFかJPEGしか選べないのだが、白黒だとJPEGも選べずにPDFの一択になってしまう。内部フォーマットはJPEGなのか、それともTIFFなのか、それも分からない。まあ、でも、これでまずまず満足の画質ではある。

白黒で読み取ったページ

念のため、カラーのJPEGでも読み取っておくことにした。圧縮もレベル2と少なめにした。ホントはRAWというかTIFFかPNGで読み取ったものを原本にしたいところだが、まあ、その代わりといったところ。

カラーで読み取ったページ

白黒での読み込みも、実はカラーで読み取ってから、画像処理用のCPUか何かでソフトウェア的に白黒にしているのだと思う。だとすれば、カラーで読み取ってから、ImageMagickなどで変換するのと、(手間を除けば)変わらないのはず。

しかし、本を解体するのは、心理的な抵抗感があるなあ。そのうち慣れちゃうのかもだけど。

自炊事始め

一昨日,初めてScansnap IX500でスキャンしたのだが,昨日は,これまた初めて裁断機 Durodex 200DX を使ってみた。幾つか失敗もしたので,反省点を含めてメモ。

  • 裁断後,ページがくっついてないかを,キチンと確認すること。ホッチキス留めの雑誌で失敗したのだが,内側のページがほんの僅かではあるが,くっついていて,そのせいでジャムってしまった。ぱっと見るとちゃんと裁断されているように感じるのだが,油断すべからず。安全を考えるのなら,多めに裁断しよう。
  • 上に関連するのだが,裁断時にページが圧着されるというか,圧力が加わるので,一度パラパラとページをばらすようにした方がよい。静電気で圧着のようになる可能性もあり。そうすると,スキャナーで紙を引き込む時に,くっついたページまで引きずられることとなる。
  • スキャナーの設定について。デフォルトはあまりにざっくりな感じなので,自分の用途を考えて,幾つか設定すべし。とりあえず,PDFかJPEGか,カラーグレー自動か手動でモノクロか,両面か片面か,JPEGの圧縮度をどうするか,このあたりを考えて,複数設定しておくこと。あとでImageMagickなどで補正することを前提とすれば,自動にせずにカラーで読み込んでおくのが良いかも。