電子テキストの文字校正

印刷を目的としない文章を、修正個所を判りやすく指示 (つまり「校正」) しながら遠くにいる人ととともに作っていくにはどうするか。メールでやりとりすることを念頭において考えていたことをまとめてここにメモしておく。

ごく短いプレーンテキスト

「2 段落めの最初の文、ふたつめの『ロボット』を『人間』に置換」という感じの、電話で口伝えするような、長たらしい指示。 ごく短い文書で校正個所が少ないときにはこれでも伝わるが、増えてくると嫌になる。

指示を受け取った側 (この文章では「著者」と呼ぶことにする) は、その指示にしたがって元の文書を書き換える。

改行が少ない文書

自然言語の単純なテキストファイルや HTML の文書など[1]

校正の内容は、プレーンテキストなら文字種や大きさはないので、ほとんど削除・挿入のみ (置換は「削除して挿入」で表現できる) となる。

タグによる校正記号

<del> と <ins> で表現する。校正に関するコメントは著者と校正者で了解して <comm> にするとか、あるいは HTML の範囲内のタグを流用する。

ロボットは他の<del>ロボット<comm>これは「人間」のはず</comm></del><ins>人間</ins>に危害を加えてはならない.

HTML を知っている人には意味が通じやすい。しかし、人間に伝えるためのもので、実際に HTML のタグとして機能するわけではない[2]ので注意が必要である。エディタは HTML 対応のもので代用できるかもしれない。

校正の作業

校正者は対象ファイルにエディタで直接タグを書き込んでいく。置換の場合、<del> と <ins> が連続することになる。

ruby を使える環境なら Docdiff (単語あるいは文字単位の差分でとる) を利用する方法がある。docdiff.conf

tag_del_start           = <del>
tag_del_end             = </del>
tag_add_start           = <ins>
tag_add_end             = </ins>
tag_change_before_start = <del>
tag_change_before_end   = </del>
tag_change_after_start  = <ins>
tag_change_after_end    = </ins>
と設定しておく。

元ファイルを別に保存しておき、対象ファイルは校正後の形に書き換える。

docdiff --format=user example.txt.orig example.txt
で校正記号入りテキストを作成する[3]。コメントには対応していないので、その後エディタで開いて書き込む。

著者の作業

校正記号入りテキストを受け取った著者は、エディタで <del> のタグで囲まれた部分 (もし校正者の指摘を受け入れられなければ <del> ではなく <ins> で囲まれた部分) や <comm> で囲まれた部分を削除する。さらに <ins> タグを (囲んでいる内容は残して) 削除する。

HTML 文書

HTML 文書の場合、上記の <del> や <ins> のタグを使う方法では校正記号が目立たない。また、タグ自体の校正をするときに特に混乱する。たとえば

<ul>
  <li>ロボットは他の人間に危害を加えてはならない.</li>
<del></ol><comm>閉じタグが間違っています</comm></del><ins></ul></ins>
となってしまう。そもそも上記の方法で用いたタグは人間のためのもので、著者と校正者で了解できていれば何でもよく、<del> や <ins> でなければならないわけではない。

それを一般化した 真鵺道 Manued というものがある。もちろん HTML 以外のプレーンテキストにも使える。規則は少ないのですぐに覚えられる。たとえば上の例は

<ul>
  <li>ロボットは他の人間に危害を加えてはならない.</li>
【</ol>/</ul>#閉じタグが間違っています】
のように書くことができる[4]

真鵺道 Manued の最大の特長は機械処理が可能という点である。Emacs (系) には manued.el がある。しかし残念ながらほかのエディタの対応は見かけない。

校正の作業

対象ファイルにエディタで校正記号を書き込んでいく。Emacs で manued.el を使えば楽である。

校正ファイルの先頭に、アプリケーション (Emacs の manued.el のみなのか) に対する修正記号定義コマンドと、人間に対する注意書 (著者と校正者がしっかり了解していればなくてもいい) を付ける。

defparentheses  [ ]
defdelete       /
defswap         |
defcomment      ;
defescape       ~
deforder        newer-last
defversion      0.9.5
校正記号は次のとおりです。
[α/β]          αをβに変更する
[/α]            αを挿入する (変更の特殊形)
[α/]            αを削除する (変更の特殊形)
[α|γ|β]       αγβをβγαに並べ換える
[α||β]         αβをβαに並べ換える(並べ換えの特殊形)
[;コメント]    校正に関するコメント

ruby を使える環境なら、Docdiff (単語あるいは文字単位の差分でとる) を利用する方法がある。

元ファイルを保存しておき、

docdiff --format=manued example.txt.orig example.txt
とする。

真鵺道 Manued 自体は上述の定義コマンドで修正記号を変更できる。しかし Docdiff は真鵺道のデフォルトの修正記号 (上記のもの) に固定されていて自由に変更できない。また Docdiff はコメントには対応していないので、後でエディタで書き込んでいく。

著者の作業

もし著者が Emacs で manued.el を使えるなら、受け取った校正記号入りテキストで、個々の校正記号についてオリジナルか修正指示のどちらを選択するかを簡単な操作でできるし、校正記号を含まない元の文書または修正された文書の全体を取り出すことも簡単にできる。

もしそれを使えない場合は、前述のタグ表現の場合と同じように、いちいち校正個所を直していく。

改行を多く含む文書

もちろん適宜改行されているテキストに対しても上記の方法は適用できる。 そのほかに diff を使うことができる。元ファイルを保存しておき、

diff -u example.txt.orig example.txt
とする。ディレクトリごとまとめて扱うこともできる。 プログラムのソースコードなどに向いている。よく改行されている HTML 文書や TeX の文書に使うこともできる。

校正コメントは使えない。

著者は diff ファイルを受け取ったら、patch で元ファイルに反映させることができる。

書き換えてしまう

ここまで「変更個所および変更内容をわかるように指示する」ことに留意して、ファイルを直接書き換えてしまう (オリジナルを残さずに) ことは考えなかった。

だんだん「校正」から逸れてきたが、履歴がきちんと残るのなら直接書き換えてしまうということも考えられる。メールでのやりとりではないが Wiki という手もある。しかし短い単なるテキストを扱うには大袈裟すぎる。それに校正段階では一般に公開しないのが普通で、そのためには認証のしくみをつけて、いちいちログインしてもらうようにしなければならない。いわゆる一般人にはそれだけでも敬遠される。

cvs, subversion などと適切なブラウザの組み合わせも、変更点がわかるので「校正」と言えなくもない。しかしこれもプログラマやそれと同じ程度にコンピュータに興味を持って向かい合える人以外にはなかなか受け入れてもらえないだろう。

朱を入れる

OpenOffice.org Writer, MS Word, PDF などの文書に「朱」を入れる。それぞれのデータを扱えるソフトを著者と校正者がそれぞれ所有していて、その「コメント機能」の類を使えることが前提となる。商用ソフトが必須となったり Linux では揃えられなかったりと障壁が大きい。

文字種や大きさ、レイアウトなどの校正は、ここで言う文字校正の範囲を越える。文字校正だけなら、テキストに変換して上記の方法を適用することも考えられる。

最後の手段は、紙にプリントして朱を入れる。もはや「電子テキスト」からも逸脱する。ついでなのでここにメモしておくが、「印刷校正記号 JIS Z 8208:2007」は 2007-01-20 改正になっている。これは有料となっているが、日本工業標準調査会のサイトで、JIS規格番号「Z8208」で検索すれば閲覧できる。

  1. HTML の地の文で適当に改行を入れると、たいてい微妙に空白がはいってレンダリングされる。英語などでは改行は単語間空白という取り扱いで問題ないのだが、日本語では格好悪いので 1段落のあいだ改行を入れないことが多い。pTeX はこのへんをうまくやってくれるので気にせず適当な文字数で改行をいれたほうがいい (エラーの際に行番号が表示されるので場所を特定しやすい)。
  2. 全体を <pre> で囲むだけでもブラウザでそれなりに見えるかもしれない。
  3. Docdiff には –format=html というオプションもある。変更点を HTML で美しく表示できるようにするものである。しかしその表示のためにたくさんのタグなどがはいるので、著者が校正結果を抽出するのにやや手間がかかる。
  4. defparentheses を【 】、defdelete を/、defcommentを#と設定している場合。

日本語スタイルガイド

Wiki 書式をやめて(簡略)HTML で書くようになったら、そのほうがむしろ書きたいように楽に書けることが判って、なんだという気がしている。

さてそうすると内容以外の、文章のスタイルについても気になってきた。それは何もここに書くときだけではない。自分のなかではこれまでの経験からある一定のルールというのが出来ているのだが、重要度 (自分にとっての) に応じてブレるものもある。

そこで文章のスタイルについてのガイドラインについて、検索してみた。Gnome.JP の Wiki を経由して、タイムリーにも出たばかりの What’s Translation@Sun日本語スタイルガイド を発見した。元々の Sun 内部の指針(【追記】リンク切れ)を再編されたものということだ。英語から日本語への翻訳を前提に書かれているが、はじめから日本語の文章を書く場合にもよく当てはまる。いったん通読したら普段は クイックリファレンスを見るだけでも随分役に立ちそうだ。何しろ個人や小さなコミュニティではこのような明文化の作業はしない (できない) ので、たいへんありがたい。

自分のなかのルールといくつかの点で違いはある。たとえば感嘆符・疑問符は使わない、としている点。横書きの、特にブログのような場面では既に日本語の一部として使用可能だと思う。さらに、もし使う場合 (メッセージでは使うとされている) には日本語と疑問符のあいだにスペースを入れるとしている点も疑問に思う。そのほか漢字とかなの使い分けのなかにもいくつか自分の基準と違うものがある。

しかしそれらを除いて大部分はたいへん有益な内容である。カタカナ語の末尾の長音は、自分のなかでも場面ごとにブレが大きく気になっていたので、100% 同意できるかどうかは別として、大いに参考になった。元々が技術文書、マニュアルを対象として作られているので、それ以外にそのまま適用できないかもしれないが、参照資料のひとつとして活用したい。

【追記】この記事を書いたときとリンク先が変更になっているので、修正しました。

iG:Syntax Hiliter プラグインと Footnotes プラグイン

WP-Dokuwiki をやめてしばらく WP 標準で書いてみようと思っている。WP-Dokuwiki で便利に思っていたのはソースコードのハイライトと脚注。これに代わるプラグインを探す。それぞれ数種類づつ見つかったが、ちょっとづつ試してみて iG:Syntax Hiliter プラグインと Footnotes プラグインを使うことにした。

iG:Syntax Hiliter プラグイン

現在のバージョン v3.5 は、添付のマニュアルを見ると 19 ほどの言語に対応しているとある。が、ふとサブディレクトリの GeSHi を最新版に入れ替えてみたらどうだろうと思い、やってみると特に問題はなさそうだ[1]。これで 80 ほどの言語に対応する(ほとんどは一度も使わないだろう)。Bash や diff, LaTeX もいけそうだ。 いろいろ探しているうちに “iG:Syntax Hiliterの不具合(?)を直す” という記事を発見。ここでも何かの拍子に設定がリセットされてしまったことがあったので、これかと思い対策した。

Footnotes プラグイン

使い方は WP-Dokuwiki の脚注とほぼ同じで、簡単。ただ出力は、本文の最後に <br /> をつけてそのあとに番号付きリストを生成するようになっているらしい。するとなぜか自動で挿入される </p> がおかしくなり、HTML 的に間違ったことになる。それで
--- footnotes.php.orig
+++ footnotes.php
@@ -98,14 +98,14 @@

        if ($footnotes){
                $counter = $start_number;
-               if ($start_number != 0) $data = $data.'<br /><ol start="'. ($start_number + 1) .'" class="footnotes">';
-               else $data = $data.'<br /><ol class="footnotes">';
+               if ($start_number != 0) $data = $data.'<div><ol start="'. ($start_number + 1) .'" class="footnotes">';
+               else $data = $data.'<div><ol class="footnotes">';

                foreach($footnotes as $footnote){
                        $counter++;
                        $data = $data.'<li id="footnote-'.$counter.'-'.$post->ID.'">'.$footnote.'  '.$current_settings['pre_backlink'].'<a href="#footnote-link-'.$counter.'-'.$post->ID.'">'.$current_settings['backlink'].'</a>'.$current_settings['post_backlink'].'</li>';
                }
-               $data = $data.'</ol>';
+               $data = $data.'</ol></div>';
        }
     return $data;
 }
と、<div> に入れることにした。 見栄えはスタイルシートで設定する。
  1. iG:Syntax Hiliter プラグインの syntax_hilite.phpswitch 文にいくつか case を書き足す必要があるかも。

テーマを作る (6)

残るこまごましたことについて。

ブロックの境界

本文や sidebar (という名の実質 bottombar)などで float で段組をしているため、それを解除する clear:both を入れる必要がある。といって次のブロックの先頭に入れるのも気持ちが悪い。そこでブロックの境界に <hr> を使い、これに clear:both をつけることにした。スタイルで
hr {
    display: block;
    clear: both;
    height: 0;
    border: none 0px; /* 完全に消すにはこれも必要。 */
    visibility: hidden;
 }
として見かけ上は消してしまう。 「スタイルシートを使用しない」状態で見ても(といってそんな人はいないと思うが)見通しがよくなった。

page.php

Template Hierarchy に詳しい説明がある。 個別記事(single)と静的ページ(page)はよく似ている(コメントを許すかどうかを除いて)と思うのだが、静的ページで page.php がない場合に single.php を探しに行くことはないというのは意外だった。ここではコメントつきページのテンプレートは single と同じとした。
<?php
/*
Template Name: Page with comments
*/
?>
<?php include (TEMPLATEPATH . '/single.php'); ?>
テンプレートが増えるとややこしくなるので、コメントなしページのテンプレート page.php は作らず、index.php の中で is_page() でそれ用の処理をすることにした。

テーマを作る (5)

index.php, single.php

ようやく本文について。 個々の記事を、本文とコメントの2段組にした。そもそもこのアイデアを思いつき、そんなテーマを探してみたものの見つからなかったので今回自分で作ってみたのだった。 個別記事の表示(single.php)のときだけでなく、index.php でも各々の記事にトラックバックURLを表示するようにした。こうしているテーマも滅多にない。私の場合 more を使うことはあまりないので、トップページを見るだけで記事全文を見られることになる。わざわざ single に行かなくてもここにトラックバックURLを表示したほうが親切だろうと考えたのだ。 このトラックバックURLは実に長くなり、レイアウトで苦労する[1]。そこで、よく他のサイトで見かけていたフォームの input に入れてある形を思い出した。入力させるところでもないのに何故こんな形にしているのだろうと不思議に思っていたが、ここにきて合点がいった。要するに幅を固定して表示できるのだ。さっそく真似ることにした。

comments.php

フォントは、他の部分では指定するとしても総称名までにしたが、コメントのところだけは遊び心で固有名を指定した。コメントとトラックバックは、順番は分けないが見かけが違うようにした。 Edit Commentsプラグインを使う。WordPress 2.1への対処法がコメントの 300 番にある。 もう一つ、Subscribe To Commentsプラグインを使うようにした。旧版(2.0.*)は設置がやや面倒だったが新版(2.1)は複数のファイルが一本化されて簡単になっていた。ところで設定で clear:both を制御できるはずなのだが毎回元に戻ってしまい、いまのこのテーマはコメントを含む記事の部分を2段組にしているので非常に具合が悪い。
if ( !$settings['clear_both'] ) {
  $settings['clear_both'] = 'clear_both';
  $update = true;
}
の個所をコメントアウトして思いどおりになったのだが、他の人は困っていないのだろうか?[2] メッセージは旧版とほとんど変わっていないのでSubscribe to Comments 日本語化より2.0.4版をいただいて流用する。
  1. テーマ作成中、MR Tech Link Wrapperなる長いURLを折り返して表示する拡張を入れた Firefox を使っていたので、ことの重大さに気づいていなかった。検証のため IE で見ると大変なことになっていた。
  2. と思ったらコメント1143番に同じ思いをしている人がいた。

日本語化に関するプラグイン

いずれもTech de Goより。簡にして要を得ている。 WordPressはなまじソースをいじれるので、ついそこに手を入れてしまうが、アップグレードなどがあるので管理が大変になる。そうか、このように前処理・後処理でできることもあるのだ。目から鱗。

テーマを作る (4)

footer.php

特に表示しなくてもいいのだろうが “Copyright © 年”を表示することにする。この年のところを、最も古い記事と最新の記事の日付を見て自動的に生成してくれるスクリプトをBoxy But Goldというテーマの中に見つけたので使うことにした。

sidebar.php

sidebarという名は踏襲するが見かけはbottomで、 3 段組とした。アーカイブの選択にはmonthchunksプラグインを使う。