ラベル Texinfo の投稿を表示しています。 すべての投稿を表示
ラベル Texinfo の投稿を表示しています。 すべての投稿を表示

2013-09-04

sicp.wordpress.com — 電子書籍版 SICP の宝庫

SICP。正式名称 Structure and Interpretation of Computer Programs。日本語訳書名「計算機プログラムの構造と解釈」。

計算機プログラムの構造と解釈
計算機プログラムの構造と解釈

この訳書を出していたピアソン桐原がピアソン・グループから離脱。社名を桐原書店へ変更。同社の方針として、もう技術書は扱わないという。全て絶版。SICP も当然絶版。Amazon では、定価 5,000 円を切る同書が、中古で 8,729 円となっている。

これで原書の Kindle 版が出ていると助かるんだけど、2013-09-04 現在、ペーパーバック版のみ発売中。

SICP 電子書籍版

朗報を一つ。

SICP はオリジナルのテキストが HTML で公開されている。そこで有志が ePub 化したり、PDF 化したり、mobi 化 (Kindle 対応) したりしている。そんな情報を集めているのが下記サイト。

サイトの更新が遅いのが玉に瑕かな。

色々なフォーマットがあるけど、ぼくの好みは PDF 版。

ベースに Texinfo (Unofficial) を使っているのがニクイ!!

上記ページの EDIT 2012/11/25: から最新版を入手できる。

このソースコードを手に入れたい人は github からどうぞ。

あとがき

SICP、少し読み始めたけど英語がなんか文学的ね。計算機の教科書で、こんな表現使う必要があるのかと問いつめたい。ともかく、英語版とはいえ SICP が手に入った。Scheme の処理系もインストールした。あとは勉強あるのみ。

2012-09-07

日本語で makeinfo (HTML ファイルの作成)

日本語の Texinfo ファイルを makeinfo で HTML 化したら見事に文字化けした (文字コードは EUC-JP)。ちょこっといじったら、文字化けが直ったので今後のためにメモ。

Texinfo ファイル

プリアンブル部 (@setfilename の後) に以下のコードを追加。

@documentlanguage ja
@documentencoding UTF-8

ファイルを UTF-8 で保存。

make

makeinfo コマンドは次の様に打った。

$ makeinfo --html --no-split --enable-encoding \
    --number-sections --css-include=tmp.css

使った makeinfo のバージョン 4.13。

あとがき

Texinfo は TeX を元にした組版システム。元は info という Emacs 専用のハイパーリンク・ドキュメントと DVI (TeX の標準的な出力) を作るものだった。ウェブ・ページの興隆に伴って HTML ページの出力にも対応。ぼくは Texinfo こそマルチドキュメント・システムのはしりだと思っている。

ただ、LaTeX ほど「書き手」がいなかったせいかしらん? 多言語化は遅れ、Emacs による info 整形ツールは最新の Texinfo の仕様に追いつかなくなり、今後流行すると思われる EPUB への対応については噂も聞かない。Texinfo で PostScript フォントが簡便に使えないのも不満の一つ。とても良いシステムだと思うのだけど、このまま時代の流れの中で消えてしまうのかしらん? 応援したいなぁ。

2005-09-09

Texinfo マニュアルの縮少印刷に難 |PostScript|

GNU 関連のマニュアルは Texinfo という TeX の方言で書かれてる。例えば、Texinfo 自身、GNU EmacsGNU wget、autoconf、gcc、screen、などなど。

いざマニュアルを印刷しようとすると、そのページ量に圧倒される。GNU Emacs のマニュアルなんて 800 ページを越えている。いくら僕の面の皮が厚いからって、そんなに印刷機を動かす勇気はない。そこで psnup コマンドを利用して 1 枚に複数ページを印刷してる。

$ psnup -4 -m0.5cm manual.ps | lpr

-4 オプションで一枚に 4 ページ印刷。両面印刷が可能なら、一枚の紙に 8 ページ分印刷できる。つまり、800 ページのマニュアルを 100 枚の紙で印刷できる計算。これ位いなら、人目を忍んでちょっとやってみようかな... という気になる。ちなみに、-m0.5cm は、紙のふちに 0.5cm のマージンを取る設定。そうしないと、パンチ穴を開けるスペースのないマニュアルが時々ある。

さて、そうやって印刷したものを読んでると、文字が汚いと思うことがある。e の横棒が消えそうになってたり、t の横棒が見えにくかったり。

Texinfo は TeX ベースだから高品質。だから、問題はプリンターの方にあるんだろう、と思ってた。実はそれが大間違い。TeX から作った PS ファイルでは、アウトライン・フォントじゃなくてビットマップ・フォントが使われてる。ビットマップ・フォントを 1/4 に小さくすれば見難くなるのは道理。

LaTeX だと PSNFSS のお蔭で、簡単にアウトライン・フォントの一種である PostScript フォントが使えるけど、Texinfo は LaTeX ベースじゃなくて TeX ベース。PS フォントを使うためには、TeX ファイルのソース、つまり texinfo.tex をいじらなくちゃいけない。

というわけで、texinfo.tex で PostScript フォントを使う pstexinfo.tex なんてのが色んな人達の手で書かれていて、Texinfo ML にも投稿されてるけど、本家ではメインの開発が忙がしくて取り込む気配がない。原因も解決策も分かってるのに、そこから先に進まない。世の中、上手くいかないものだ。

2005-06-19

quick-url でリンクを簡単に入力する |Emacs|HTML|Texinfo|RD|

[2005-05-05] に、abbrev を使ってリンクを簡単に入力する方法について書いた。今回はその発展版。

何がしたいか

abbrev を使う方法で不便なのは、省略文字と展開文字が一対一対応していること。例えば、google という省略文字は必ず <a href="http://www.google.co.jp/">Google</a> に展開される。HTML だけ書いているなら、これは望ましい動作で問題ない。でも、HTML 以外でも同じことがしたかったらどうか。例えばメールの中に Google への URL を書きたくなったら。Texinfo のソースに Google へのリンクを含めたくなったら。RD に (以下省略)。一対一対応だと対処できない。

こういう場合の解決策はいくつかある。モード別に abbrev を定義するとか、展開する形式に従ってプレフィックスやサフィックスを決めておくとか...。こういう方法だと URL 変わったら全部修正しなくちゃいけないから大変。

省略文字と URL は決まっているんだから、モード別に展開する形式を定義できればそれに越したことはない。というわけで、quickurl パッケージ。

quickurl

quickurl は、abbrev のように省略文字を URL に展開する GNU Emacs の標準パッケージ。省略文字と URL はリストで定義する。

("GNU" "http://www.gnu.org/")

GNU の後ろで M-x quickurl すると

<URL:http://www.gnu.org/>

という形に展開される。

なお、URL に続けてコメントを書くこともできる。正確な書式は次の通り。

(<省略文字> <URL> <コメント>)

省略文字と URL のリストは、quickurl-url-file (デフォールトは ~/.quickurls) の中に書く。ぼくの .quickurls はこんな感じ。

(
;; Emacs
 ("emacs"    "http://www.gnu.org/software/emacs/"   "GNU Emacs")
 ("xemacs"   "http://www.xemacs.org/"             "XEmacs")
; Elisp
 ("auctex"   "http://www.gnu.org/software/auctex/"  "AUCTeX")
 ("navi2ch"  "http://navi2ch.sourceforge.net/"      "Navi2ch")
 ("emacsw3m" "http://emacs-w3m.namazu.org/"     "Emacs-w3m")
 ("mew"      "http://www.mew.org/"                  "Mew")
 ("howm"     "http://howm.sourceforge.jp/index-j.html")
 ("sdic"     "http://namazu.org/~tsuchiya/sdic/")
 ("reftex"   "http://staff.science.uva.nl/~dominik/Tools/reftex/" "RefTeX")
 ("tcode"    "http://openlab.ring.gr.jp/tcode/"     "T-Code")
 ("xsymbol"  "http://x-symbol.sourceforge.net/"     "XSymbol")
 ("yatex"    "http://www.yatex.org/"                "YaTeX")
;; Search Engine
 ("ask"      "http://ask.jp/"                   "Ask Jeeves")
; Google
 ("google"   "http://www.google.co.jp/"         "Google")
 ("googlenews" "http://www.google.co.jp/nwshp?hl=ja&tab=wn&ie=UTF-8" "Google News")
; Yahoo
 ("yahoo"    "http://www.yahoo.co.jp/"          "Yahoo!")
; goo
 ("goo"      "http://www.goo.ne.jp/")
; infoseek
 ("infoseek" "http://www.infoseek.co.jp/"       "Infoseek")
;; Map
 ("yahoomap" "http://map.yahoo.co.jp/"          "Yahoo! 地図")
 ("goomap"   "http://map.labs.goo.ne.jp/"       "goo 地図")
 ("infoseekmap" "http://map.www.infoseek.co.jp/" "Infoseek 地図")
 ("livedoormap" "http://map.livedoor.com/map/scroll" "Livedoor 地図")
 ("googlemap" "http://maps.google.com/"         "Google Map")
 ("mapsearch" "http://map.search.ch/index.en.html" "map.search.ch")
以下略...
)

新しい URL の追加は、.quickurls を開いて追加・保存するだけ。.quickurls の修正は直ちに反映される (再ロードとかは不要)。

モード別展開用の設定

実は、このままじゃ abbrev の global 展開と同じ。少し手を加えなくちゃいけない。

quickurl は、展開形式を自分でカスタマイズできる。この機能を使わせてもらう。モードごとに展開形式を変えるには、次のコードを .emacs に追加する。

;; 好みのキーに設定
(define-key mode-specific-map "q" 'quickurl)

(setq quickurl-grab-lookup-function #'quickurl-current-word)
(defun quickurl-current-word ()
  (save-excursion
    (let ((beg (progn (skip-chars-backward "A-Za-z0-9-") (point)))
   (end (progn (skip-chars-forward  "A-Za-z0-9-") (point))))
      (buffer-substring-no-properties beg end))))

(setq quickurl-format-function #'quickurl-mode-format-function)
(eval-after-load "quickurl"
  '(progn
    (defun quickurl-mode-format-function (url-list)
       (let ((url  (quickurl-url-url         url-list))
      (desc (quickurl-url-description url-list)))
  (delete-region (point) (search-backward lookup))
  (cond
   ((memq major-mode '(nxml-mode sgml-mode xml-mode yahtml-mode))
    (format "<a href=\"%s\">%s</a>" url desc))
   ((memq major-mode '(rd-mode))
    (format "((<%s|URL:%s>))" desc url))
   (t url))))
))

上の設定では、C-c q で文字列を展開するようにした。

quickurl-mode-format-function がこの quick hack のキモ。今の所、nxml-mode, sgml-mode, xml-mode, yahtml-mode と rd-mode に対応している。HTML 入力用のモードでは

<a href="URL">コメント</a>

という形に、RD モードでは

((<コメント|URL:URL>))

それ以外のモードでは、URL だけが入力される。

quickurl-current-word を定義しているのは、デフォールトでは展開語の直前が日本語だったり、タグだったりすると quickurl がちゃんと動かないのに対応する為。

雑感

abbrev 機能は便利だけど、URL の展開には向いていない気がする。abbrev は略語展開なんだから、URL の入力まですべきではなかったのかも。今は、abbrev は略語展開、quickurl は URL の入力と分けて使ってる。例えば、clmemo は略語展開で「ChangeLog メモ」へ、quickurl で clmemo.el へのリンク という感じ。

ref