HTML文書を綺麗に印刷しよう

イントロダクション

今日の俺

情報科学基礎実験の課題を寝っ転がりながら考えたいなー。」

「よし、課題のページを印刷しよう。」

「でも、ブラウザで印刷すると汚くてやる気でねえんだよなー。」

「LaTeXで印刷すると綺麗なんだよねー。」

「はっ、そうか、LaTeXか!」

というわけで、このページでは、HTML文書をLaTeX文書に変換して綺麗に印刷し、自己満足の世界に浸る方法を紹介します。

ここで扱うHTML文書は、アルゴリズムとデータ構造演習第4回のページです。

前提

ここでは、LaTeX文書を組版して印刷できる環境は既に整っているとします。

LaTeX文書が印刷できない人は、Webサイトを見るなり、LaTeX2e 美文書作成入門(amazon)を買うなりして、がんばってください。

変換ってどうやるの?

プログラムを書いてもいいのですが、面倒ですね。課題をやるのに、課題より難しいことはしたくありません。

先人が頑張って策定してくださった、XSLT(XSL Transformations)がありますので、今回はそれを使うことにします。

XSLT?

XSLTは、XML文書の組版を行う、XSL(Extensible Stylesheet Language)と呼ばれる標準の一角をなす技術です。XML文書を、組版用のXSL-FO文書に変換するための言語として作成されました。

文書の変換用の言語には、他にDSSSL(Document Style Semantics and Specification Language)というものもありますが、これはSchemeを使っています。()だらけです()。使いたくないですね。

「こんなかっこだらけの言語を扱いたくない。もっと分かりやすくシンプルに。」を目指して設計されたのが、XSLTです。

本来XSLTは、XSL-FO文書を出力することを目的としてはいますが、実際には、どんな文書でも出力することができます。チューリング完全です。しかも、扱いやすい! これは使うしかないですね!

※このページは、XSLTの解説を目的としたものではありませんので、XSLTの文法等についての説明は端折ります。いつかきっとXSLTに関する記事が書かれることでしょう。

XSLTを使うには

XSLTを使うには、XSLTプロセッサが必要です。ここでは、Apache Xalanを使います。http://www.apache.org/dyn/closer.cgi/xml/xalan-cから、適当なミラーを選択して、binariesの下にあるバイナリから適当なものを選んでダウンロードしてください。 Webサイトには、Xercesも必要だとか書いてあるので、http://www.apache.org/dyn/closer.cgi/xml/xerces-c/から、適当なバイナリを一緒にダウンロードしておくといいと思います。本当に必要なのか分からないですけど。

以下、窓使いのための説明です。

ダウンロードしたファイルを解凍したら、適当なディレクトリに置いてください。PATHを通しておくと使いやすいでしょう。システム環境変数のPATHに、

を付け加えてください。

これで準備が整いました。コマンドプロンプトを起動して、

と入力すると、使い方が表示されます。読めば分かりますよね。 基本的な使い方は、

です。

これで、XSLTを使う準備が整いました。

さあ、肝心の変換だ!

では、HTMLを変換するためのXSLTスタイルシートを書きましょう、と言いたいところですが、面倒ですね。ここはやはり先人の知恵をお借りしたいものです。

幸い、Kyousumという方が作成した、XHTMLのためのXSLTスタイルシートがあります。今は普通には手に入らないのですが、Internet Archiveから探してきました。 再配布等自由らしいので、ここに上げておきます。html2latex.xsl(私の改変が入っています。)

よし、じゃあ、これを使っていざ

変換の前に

入力する文書が、妥当なXHTML文書であることが必要です。巷にあふれるクソみたいなHTML文書は、そのままでは変換できる可能性が低いです。 必ず、XML妥当性検証ツール(XML validator)に通しておきましょう。

ここでは、http://validator.aborla.net/index.php5?lang=jaというWebサイトを使います。自動的に妥当なXHTML文書に修正してくれるのでオススメです。

いざ変換……と思ったら

では、修正した文書を基に、xalanに通してみましょう。

で、無事にLaTeX文書が……

と思ったら、私の環境ではエラーが発生しました。DTDが見つからないと言うのです。これは困った。場当たり的な対処として、文書型宣言(<!DOCTYPEで始まる行)を削除してしまいましょう。

気をとりなおしてもう一度

では、もう一度、コマンドを実行してみましょう。無事にLaTeX文書が作成されたはずです。

次は、これをLaTeXにぶちこんで組版してもらうだけです。

またエラー?

LaTeXで組版を実行したら、エラーが出ました。

と表示されます。LaTeX文書をよく見てみると、

と書かれた箇所があることが分かりました。'_'はそのままでは出力できませんね。こういった箇所は手で潰す必要があります。 ここでは、verbatim環境でくくってしまうことにしました。

PDFゲットだぜ!

適当な修正を施して、もう一度LaTeXを実行すると、見事に組版された文書が得られました。情報科学基礎実験.pdf

これで目的達成です! やったね!


Category読み物

carbon_twelve/HTML文書を綺麗に印刷しよう (最終更新日時 2010-12-22 23:43:59 更新者 carbon_twelve)