##master-page:ReadingTemplate #format wiki #language ja = HTML文書を綺麗に印刷しよう = == イントロダクション == 今日の俺 「[[情報科学基礎実験]]の課題を寝っ転がりながら考えたいなー。」 「よし、課題のページを印刷しよう。」 「でも、ブラウザで印刷すると汚くてやる気でねえんだよなー。」 「LaTeXで印刷すると綺麗なんだよねー。」 「はっ、そうか、LaTeXか!」 というわけで、このページでは、HTML文書をLaTeX文書に変換して綺麗に印刷し、自己満足の世界に浸る方法を紹介します。 ここで扱うHTML文書は、[[http://hagi.is.s.u-tokyo.ac.jp/kisojikken/20101222.html|アルゴリズムとデータ構造演習第4回のページ]]です。 == 前提 == ここでは、LaTeX文書を組版して印刷できる環境は既に整っているとします。 LaTeX文書が印刷できない人は、Webサイトを見るなり、[[http://www.amazon.co.jp/dp/4774143197|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プロセッサが必要です。ここでは、[[http://xalan.apache.org|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に、 {{{;インストールしたディレクトリ\Xalan(Xerces)のディレクトリ名\bin}}} を付け加えてください。 これで準備が整いました。コマンドプロンプトを起動して、 {{{>xalan}}} と入力すると、使い方が表示されます。読めば分かりますよね。 基本的な使い方は、 {{{>xalan -o 出力ファイル名 変換元のXML文書 XSLTスタイルシート}}} です。 これで、XSLTを使う準備が整いました。 == さあ、肝心の変換だ! == では、HTMLを変換するためのXSLTスタイルシートを書きましょう、と言いたいところですが、面倒ですね。ここはやはり先人の知恵をお借りしたいものです。 幸い、Kyousumという方が作成した、XHTMLのためのXSLTスタイルシートがあります。今は普通には手に入らないのですが、Internet Archiveから探してきました。 再配布等自由らしいので、ここに上げておきます。[[attachment:html2latex.xsl]](私の改変が入っています。) よし、じゃあ、これを使っていざ == 変換の前に == 入力する文書が、'''妥当なXHTML文書'''であることが必要です。巷にあふれる--(クソみたいな)--HTML文書は、そのままでは変換できる可能性が低いです。 必ず、XML妥当性検証ツール(XML validator)に通しておきましょう。 ここでは、[[http://validator.aborla.net/index.php5?lang=ja]]というWebサイトを使います。自動的に妥当なXHTML文書に修正してくれるのでオススメです。 == いざ変換……と思ったら == では、修正した文書を基に、xalanに通してみましょう。 {{{>xalan -o ./情報科学基礎実験.tex ./情報科学基礎実験.htm ./html2latex.xsl}}} で、無事にLaTeX文書が…… と思ったら、私の環境ではエラーが発生しました。DTDが見つからないと言うのです。これは困った。場当たり的な対処として、文書型宣言({{{