もうひとつの「リフローは難しい」、あるいは期待するリフロー その3
57

カテゴリー:電子書籍,青空文庫 | 投稿者:POKEPEEK2011 | 投稿日:2012年9月9日 |

新しい注記、「地から◯字で開始、地から●字で折り返し」を提唱したい。ということで、まず複数行の文章の現状の「地から○字上げ」の処理が、各種青空文庫ビューアで様々に処理されていること、それぞれに難点があることを示しておきます。その上で、「地から◯字で開始、地から●字で折り返し」をシミュレーションを提示し、この新しい注記の採用を提唱したいと思います。

8月18日の投稿『もうひとつの「リフローは難しい」、あるいは期待するリフロー』では、青空文庫のポー「盗まれた手紙」(佐々木直次郎訳)の扉のエピグラムの各種青空文庫ビューアでの見え方を次の3つに分類されると説明していました。

画像を見ると、大きく分けて2つ、細かく分けると3つのタイプがあることが分かります。
①注記に忠実に字上げを行なっているビューア
②字上げを行なっているが、字上げの処理が①と異なっているビューア
③字上げの注記は無視して天から表示しているビューア

その後、表示のされかたを整理していましたら、この分類では不正確であることが分かってきました。分類は表1のように大きく分けて3つ、細かく分けると7つにもなることが分かりました。

 表1 ポー「盗まれた手紙」のエピグラムの表示のされかたの分類
 大分類   中分類   特 徴   初行   中間行   終行   ビューア 
CYN Cn 常に地から n 字上げ T0Cn  T0Cn   TFCn   AIR草紙 
 TxtMiru2 
天(T0)から地からn字上げ(Cn)で表示 天(T0)から地からn字上げ(Cn)で表示  地からn字上げ(Cn)で表示。
天は文字数次第(TF)。 
 C0  常に地付きせで表示  T0C0   T0C0   TFC0   i読書 
天(T0)から地(C0)まで表示 天(T0)から地(C0)まで表示  文末を地付き(TFC0)で表示。
天は文字数次第(TF)。 
 C0Cn  地付きと地からn字上げの併用  TFC0   T0C0   T0Cn   豊平文庫 
C0地付き(C0)で表示。天は文字数次第(TF)。 天(T0)から地(C0)まで表示  天(T0)から地からn字(Cn)まで表示 
 TFC0   T0C0   T0Cn 
C0地付き(C0)で表示。天は文字数次第(TF)。 天(T0)から地(C0)まで表示 天(T0)から地(C0)まで表示
CNN Cn 字数/行 < 表示文字列のとき、
地から n 字上げで表示
 T0C0   T0C0   TFCn   PageOne 
天(T0)から地(C0)まで表示 天(T0)から地(C0)まで表示 地からn字上げ(Cn)で表示。
天は文字数次第(TF)。
T0 字数/行 < 表示文字列のとき、
天から表示
T0C0  T0C0   T0CF   BREADER
 i文庫S(和文) 
天(T0)から地(C0)まで表示  天(T0)から地(C0)まで表示   天(T0)から表示。地は文字数次第(CF)。 
CNN 常に天から表示  T0C0   T0C0   T0CF   SkyBook
 i文庫S(英文) 
 天(T0)から地(C0)まで表示   天(T0)から地(C0)まで表示   天(T0)から表示。地は文字数次第(CF)。 

大分類の3つは次の意味です。
CYN(地寄せ処理をしていて、1行あたりの字数による条件分岐のないタイプ)
CYY(地寄せ処理をしていて、1行あたりの字数による条件分岐のあるタイプ)
CNN(地寄せ処理をしないタイプ)

中分類の記号は、次の意味です。
Cn(地からn字上げのnを処理しているタイプ)
Cn(地からn字上げのnを処理しないで、地付きつまりn=0で処理しているタイプ)
T0(天からの表示で処理しているタイプ)

小分類である初行(第1行)、終行(最終行)、および中間行の記号は表に示す通りで、どこからどこまでかを示しています。1行だけで表示されるときは、終行が表示されます。

初行は、T0C0、T0Cn、TFC0の3つのタイプに分かれます。
中間行は、T0Cn、T0C0の2つのタイプに分かれます。
終行は、T0CF、T0Cn、TFCn、TFC0の4つのタイプに分かれます。

表のなかの文章だけでは、どのような処理になっているのかは分かりにくいと思いますので、7つのビューアでの実際の表示を見てみましょう。

XHTML版での処理
まず、XHTMLでの基本的な処理は、次の通りでCYN-Cn(常に地からn字上げ)の表示です(本文字詰めが13字になったときに、アクセント付き文字の外字画像が1行になってしまうのは、ここでは愛嬌としておきましょう)。

CYNタイプ
CYNは地寄せ処理をしていて、1行あたりの字数による条件分岐のないタイプです。
このうちのCYN-Cnのタイプが上記のXHTML版の地寄せ処理どおりに忠実に処理しているタイプで、PCの青空文庫ビューアのAIR草紙とTxtMiru2がこれに当たります。

i読書は、CYNではあるが、常に地付きで処理しているCYN-C0タイプです。

豊平文庫はCYN-C0Cnタイプで,地付きと地からn字上げを併用していますが、和文と英文とで処理が異なります――和文は終行がT0Cn(天から地よりn字上げ)、英文はT0C0(天から地まで)。どちらも、テキスト処理は、終行から初行へと計算されると思われる他にはない特殊な方式です。

CYYタイプ
CYYタイプは、地寄せ処理をしていて、1行あたりの字数による条件分岐のあるタイプです。画面の字数/行により、表示のされ方が違うべきだという方針の基に設計されており、リフロー表示を考慮に入れた処理だと言えます。[#地から○字で開始]注記も、1行あたりの字数によって、テキスト処理の仕方が変ることを想定しています。

画面の字数/行が表示すべき文字列の文長よりも短くなったときに、地からn字上げで表示するのがCYY-Cnタイプです。地からn字上げの処理はいろいろありますが、PageOneは文末だけをn字上げしています。

bRAEDERは、画面の字数/行が表示すべき文字列の文長よりも短くなったときには、天から表示するというCYY-T0タイプです。現時点では、地寄せのリフロー処理をもっとも考えて処理していると言えます。

i文庫Sも和文に対しては、bREADERと同じくCYY-T0タイプの処理を行なっています。しかし、英文に対しては地寄せ処理は無視してCNN-T0タイプの処理を行なっており、和文と英文とでどうして処理を変えているのかは、ちょっと理由が思いあたりません。

CNNタイプ
CNNは地寄せ処理もまったくしないタイプです。SkyBookが唯一このタイプです。底本での原文の見え方とは違っていますが、底本と見比べることがなければ、違和感のある表示になることがないだけ、割り切った、ある意味優れたリフロー処理と言えます。こんがらがった結び目を解くのに、結び目を剣でばっさり切ったという「ゴルディアスの結び目」を思い起こさせます。

他にも、青空文庫ビューアはありますが、実例の確認はこれでひとまず終了ということにしておきます。

以上のように、[#地からn字上げ]の処理の実装が様々に行われているということは、解釈がいろいろでき、処理も難しいのだと思われます。エピグラムへの[#地からn字上げ]注記の適用のこの欠点を救う注記として、[#地から○字で開始、地から●字で折り返し]を新設したらどうだろうかというのが、今回の提案です。

■[#地から○字で開始、地から●字で折り返し](仮)の新設提案
[#地から○字で開始、地から●字で折り返し]を採用すると、文字の開始位置が揃います。[#地から○字で開始〕注記は基本的には天からの〔#▲字下げ]注記と同様の処理です。地での折り返しは〔#◎字詰め〕注記と同様の処理を行ないますが、リフロー表示で字詰めの数字を変動にしていくことを提案していますから、注記での固定数字の指示は、[地から●字で折り返し]とします。

考察を進めていく中で、天からの[#▲字下げ]注記と違って、やっかいな問題が一つあることに気が付きました。エピグラムは一段階小さな文字で印刷されることがあります。実際、ポーの「盗まれた手紙」でもそうなっています。青空文庫ビューアのなかでは、1段階小さな文字の注記に対応していないものもありますから、[#地から○字で開始]の「○字」を底本で数えて、そのまま注記に載せてしまうと、小さな文字の対応・不対応で支障が出かねないということになります。

したがって、[#地から○字で開始]では便宜的に、文字数の計算に従うということにしてはどうだろうかということも合わせて提案しておきます。もちろん、“小さな文字●字”とかにすることもできるでしょうが、地からの字上げは通常文字の大きさで数えるとすると、計算と注記が複雑になりますから、そこまでの再現は求めないということにしておきたいと思います。参考のためにポー「盗まれた手紙」の底本の該当箇所のスキャン画像、文字の大きさを変えた地から◯字の算出の図を次に示しておきます。

文字数で数えると、今の場合、[#地から29字で開始]となります。1行が29字より多い場合は、1行の字数が減っていっても、地から29字で開始となることは変わりません。1行が29字になった時には、エピグラムは本文とは別の組みということで、例えば天から1字下げとすることとし、地からは2字上げを保持するものとします。地での折り返しは、字詰めを指定すれば、解決できると思われます。

1行の字数が28字以下の場合は、地からの開始字数を1字ずつ減らしていくことで、天から1字下げ、地から2字上げを保持していくものとします。例えば、18字/行の場合は[#地から15字で開始]、13字/行の場合は[#地から10字で開始]ということになります。

こんなふうになるはずというのを、AIR草紙で作成してみました。(12/09/18図を更新)

AIR草紙の場合は、1段階小さな文字に対応(85%小さくなる)していますので、[#1段階小さな文字]の注記を行った場合には、次の図のようになります。底本と比べると、地からの空きが大きくなりますが、1行の文字数が小さい場合はあまり違いはなくなります。(12/09/18図を更新)

「アッシャー家の崩壊」の例

もともと[#地から○字上げ]ではなく、[#地から○字で開始]の方が良いのではないかと思いついたのは、「アッシャー家の崩壊」のエピグラムの画像を見た時でした。AIR草紙の例で見てみますと、欧文の2つの文の開始位置、和文の開始位置がずれているのが分かります。これはエピグラムの各文の文長が異なっているからで、地からの字上げ指定ではもともとコントロールできないことだと思います。青空文庫の原テキストは次のようになっています。

[#地から4字上げ]Son coeur est un luth suspendu;
[#地から4字上げ]〔Sito^t〕 qu'on le touche il 〔re'sonne〕.
[#地から5字上げ]「彼が心は懸《か》かれる琵琶《びわ》にして、
[#地から5字上げ]触るればたちまち鳴りひびく」
[#地から3字上げ]ド・ベランジュ

字数を分かりやすくするために、アクセント分解、ルビを除いて、文字数を数えてみます。

[#地から4字上げ] Son coeur est un luth suspendu; 31半角
[#地から4字上げ] Sitot qu’on le touche il resonne. 33半角
[#地から5字上げ] 「彼が心は懸かれる琵琶にして、 30半角
[#地から5字上げ] 触るればたちまち鳴りひびく」 28半角

英文、和文共に各文で文字数が異なるのが分かります。また、英文では半角の合計数が奇数になることがあり、和文・英文で書き出しが揃わないことも分かります。更に、行末が句読点や約物になっているので、事前の計算はも難しいとも言えます。

これを[#地から○字で開始]注記を使って書き改めると、次のようになるはずです。

[#ここから地から18字で開始、地から4字で折り返し
[#ここから17字詰め]
Son coeur est un luth suspendu;
〔Sito^t〕 qu’on le touche il 〔re’sonne〕.
「彼が心は懸《か》かれる琵琶《びわ》にして、
触るればたちまち鳴りひびく」
[#ここで字詰め終わり]
[#ここで地から開始終わり]

AIR草紙でシミュレートした図を現状の注記と比べると、右の図のようになります。[#地から○字で開始]を使用すると、当たり前のことですが、文字列の開始位置が揃って、現状のような不揃いはなくなります。

これをもって、[#地から○字で開始、地から●字で折り返し]注記の新設の提案の説明をひとまず終えることとします。

[#地から○字で開始]注記のシミュレート 現状の注記


4 Comments »

  1. ■議論のまとめ
    わたしの理解したところで議論をまとめますと――

    大量の余白を天から指定した場合に、余白長ががっちり固定される一方で、本文の文字数の方が流動的に変化してしまう。なので、出力先の画面サイズが小さかったりして一行あたりの文字数が減ったときに、天の余白がどどんと続いて、本文がちょっと、という具合になったりしてしまう。

    そこで、余白の数え方を地からにしてやれば固定される余白の量が少なくなって、余白がむやみに確保されないので気持ちいい。でも、行頭が揃わないケースが発生して気持ち悪い。

    地から余白量を指定しつつ、行頭も揃う、という注記が欲しい。

    ――ということですよね?

    ■私見
    まず、地から数えて行頭が揃わないのは、個人的には仕方ないよねと思うところです。地から数えるなら行末こそ揃うべきラインだと思いますし、行頭をそろえさせるなら天からの字下げを指定するのが筋じゃないかな、と。

    でもたしかに、天から指定した余白ががっつり固定されるのは好ましくない。本文をぎたぎたに改行するくらいなら余白なんかいらない。

    と、考えますと、大幅に余白を指定するけれど本文の長さを優先してねという、優柔不断な注記が書けたらいいんじゃないでしょうか。「この行、本文20字をがんばってキープしてね。天から20字下げて欲しいけど、本文が20字あるのが大事だからね。20字入らないときは、改行するんじゃなくってまず余白を削ってね」という感じ。

    この「本文の長さ」というのは、言い換えれば「改行の位置」なわけで、つまり、html で言うところの pre 要素(整形済みテキスト)にいきつくんじゃないか。そこでこういう注記を私は提案するわけです。

    [#ここから整形済1行18字][#字下げ22字]
    Son coeur est un luth suspendu;
    Sito^t〕 qu’on le touche il 〔re’sonne〕.
    彼が心は懸《か》かれる琵琶《びわ》にして、
    触るればたちまち鳴りひびく」
    [#整形済ここまで][#字下げここまで]

    (※字下げの数は計算しやすい適当な数です。)

    ■リーダー側に期待する実装。

    (1)「整形済」を解釈するパターン。
    自分が表示できる行数を調べて、18+22=40以上なら22字下げて本文。40未満なら、足りない分を字下げから削る。18未満ならリーダー側の好きにしていいけれど、「指定どおりに表示できませんでした」みたいな応答もユーザーに返してやるのを推奨。

    (2)「整形済」を解釈しないパターン。
    [#字下げ22字]だけ解釈して22字下げ。後方互換的。

    ■POKEPEEK2011 さんのご提案の注記との違い

    (1)後方互換する。
    あたらしく増えた注記を理解しないリーダもさしあたり困らない。

    (2)html/css との互換性をとりやすい。
    pre 要素, white-space:pre とだいたい同じ仕様になるはず。活用できるかどうかは別として。

    (2)いろいろ応用がきく。
    余白のとりかたとは関係なく、一行の文字数のキープが大事な場面はエピグラムに限らずあるはず。たとえば、このブログで大久保さんがやっている『地底の国のアリス』 http://www.aozora.gr.jp/aozorablog/?p=1188 のネズミの話は、途中で改行されたりすると困るし、『グレイト・ギャツビー』 http://www.aozora.gr.jp/cards/001036/card4831.html の第九章のスケジュール表も、あんまり変なところで改行して欲しくないのだけど現状ではどうしようもない。一行の文字数を指定できれば、少なくともどう見えて欲しいかは伝えることができそう。

    Comment by 枯葉 — 2012年9月24日 @ 1:37 AM
  2. 次の文章が、私の言いたかったことをよくまとめてくださっています。

    大幅に余白を指定するけれど本文の長さを優先してねという、優柔不断な注記が書けたらいいんじゃないでしょうか。「この行、本文20字をがんばってキープしてね。天から20字下げて欲しいけど、本文が20字あるのが大事だからね。20字入らないときは、改行するんじゃなくってまず余白を削ってね」という感じ。

    わたし的にちょっと表現を付け加えると、
    「この行、本文20字をがんばってキープしてね。天から20字下げて欲しいけど、本文が20字あるのが大事だからね。20字入らないときは、改行するんじゃなくってまず余白を削ってね」、「余白と合わせて、本文の20字も入らなかったら、余白は1文字ぐらいにして、本文の文字数も減らして行ってね、決して改行してはいけないよ」
    ですかね。

    優柔不断な注記というか、注記の指定数値がリフロー計算の基となる数値となる注記ということですね。

    >(2)「整形済」を解釈しないパターン。
    >[#字下げ22字]だけ解釈して22字下げ。後方互換的。
    後方互換的とかの意味が分かりません。むしろ、字下げは1字程度に固定して、字下げしないほうがリーダーの実装処理的には楽なのではないかと思います。

    Comment by POKEPEEK2011 — 2012年9月24日 @ 6:03 AM
  3. 「余白と合わせて、本文の20字も入らなかったら」の場合は、挙動を決めないほうがいいんじゃないか、と私は思いますね。字を小さくして改行位置を維持するのも正しいし、画面をつきぬけてレンダリングしてスクロールバーを出す(html で pre を使うとこうですね)のも間違いとは言いがたいですし。

    それから、後方互換、新しい注記に対応しないリーダーでもさしつかえないようにするという意味合いでした。
    表示サンプル http://www1.bbiq.jp/kareha/prefix_sample.txt
    (えあ草紙)http://www.satokazzz.com/airzoshi/reader.php?url=http%3A%2F%2Fwww1.bbiq.jp%2Fkareha%2Fprefix_sample.txt&home=http%3A%2F%2Fwww1.bbiq.jp%2Fkareha%2Fprefix_sample.txt&title=#

    サンプルを3つ示します。1はPOKEPEEKさんのご提案、2、3は私案です。えあ草紙での実際の表示をご覧いただくと、1は字下げ地上げなし、2は字下げ、3は字上げになるのが確認いただけるかと思います。新しい注記を作るとしたら、なるべく、現行のリーダーが困らないようなものにしたほうがよいのではないかなという趣旨です。

    ※補足とお詫び。前回のコメントで例示した注記の書き方は、青空文庫注記の基本的なルールを守れていませんでした。今回のサンプルにある形がより望ましいだろうと思います:

    [#ここから整形済1行18字]
    [#ここから22字下げ]
    Son coeur est un luth suspendu;
    〔Sito^t〕 qu’on le touche il 〔re’sonne〕.
    「彼が心は懸《か》かれる琵琶《びわ》にして、
    触るればたちまち鳴りひびく」
    [#ここで字下げ終わり]
    [#ここで整形済終わり]

    Comment by 枯葉 — 2012年9月24日 @ 10:49 PM
  4. preを使うというアイデアで当たりでした。

    枯葉さんがpre要素を提案されたので、XHTML版の既存のHTMLスタイルから学習していましたので、ここまで時間がかかってしまいました。
    注記一覧を読んでみたら、字下げ、字上げも意外に簡単なdiv要素でした。しかし、当然でしょうが、地から○字で開始などというHTMLタグや指定方法はありません。CSSも探してみましたが、見つかりませんでした。仕方がないので、天からの字下げ(左マージン)と地からの字上げ(右マージン)を指定した次のようなHTMLを作ってみました*1。

    <html>
    <meta http-equiv=”content-type” content=”text/html; charset=UTF-8″>
    <body>
    <div class=”tensage_22_cjiage_4″ style=”margin-left: 22em; margin-right: 3em”>
    Son coeur est un luth suspendu;<br />
    Sitôt qu’on le touche il résonne.<br />
    「彼が心は懸かれる琵琶にして、<br />
    触るればたちまち鳴りひびく」<br />
    </div>
    </body>
    </html>

    これをWEBで見ますと、地からの字上げもあるようになりますが、表示のされかたは天からの字下げが大きい場合の表示そのもので、リフローに適した表示とは思えません*2。

    次に、preを使ったXHTMLで次のように記述する方法に思い当たりました*3。

    <html>
    <meta http-equiv=”content-type” content=”text/html; charset=UTF-8″>
    <body>
    <div class=”chitsuki_4″ style=”text-align:right; margin-right: 4em”>
    <pre>
    Son coeur est un luth suspendu;__
    Sitôt qu’on le touche il résonne.
    「彼が心は懸かれる琵琶にして、___
    触るればたちまち鳴りひびく」_____
    </pre>
    </div>
    </body>
    </html>

    この記法のポイントは、テキスト・エディターなどで等幅フォントを使って文章を入力し、各文の末尾が同じになるように、文末にスペースを入れて揃えることです。

    このHTMLをWEBブラウザで表示してみますと、望んでいる表示にどんぴしゃでした。WEBの横書きの表示では、画面幅がそれ以上狭くならない制限がある*4ようですが、テキスト版を処理する青空文庫ビューアでは、その文字数制限も10字前後まで少なくすることは可能と思われます。

    上記の、preタグは青空文庫の注記記法では、例えば[#ここから整形済み]、[#ここで整形済み終わり]というブロック注記にすることができます(1行だけの整形済み注記は基本的に不必要です)。その記法では、次のように表されます。

    [#ここから地から3字上げ]
    [#ここから整形済み]
    Son coeur est un luth suspendu;
    〔Sito^t〕 qu’on le touche il 〔re’sonne〕.
    「彼が心は懸《か》かれる琵琶《びわ》にして、
    触るればたちまち鳴りひびく」
    [#ここで整形済み終わり]
    [#ここで字下げ終わり]

    このpre要素を使うことができれば、枯葉さんも指摘されていましたが、応用範囲は広いでしょう。実際、文末のスペースを入れれば良いと気づかせてくれたのは、「地からの字上げ」の事例を調べていて出会った夢野久作「ドグラ・マグラ」の次の箇所です。preタグを使って記述してみました(HTMLで□は全角スペースを示します)。

    <html>
    <body>
    <div class=”chitsuki_3″ style=”text-align:right; margin-right: 3em”>
    <pre>
    墺国理学博士□□□□□□□□□
    独国哲学博士□<ruby><rb>面黒楼万児</rb><rp>(</rp><rt>めんくろうまんじ</rt><rp>)</rp></ruby>□作歌
    仏国文学博士□□□□□□□□□
    </pre>
    </div>
    </body>
    </html>

    以上により、[#ここから地から○字で開始、地から●字で折り返し]の新注記の提案は、[#ここから整形済み]、[#ここで整形済み終わり](HTMLではpre)の提案となります。pre要素はpre要素でやっかいな問題もあるようですが、ご検討をよろしくお願いします。ちなみに、主要5Webブラウザで上記HTMLの表示をしていて、Safariでのpreの表示では、和欧混植時には和欧が揃う等幅フォントの指定が必要ことを初めて知りました。

    脚注:
    *1:WEBブラウザではありませんが、字下げ文字数が大きい場合の可読性の向上について、PC版青空文庫ビューアの代表格であるえあ草紙で新しい方式が開発された模様です。天からの字下げが大きい場合に、天からの字下げ文字数を画面行長が小さくなるに従って減らしていき、最小表示文字数に達したら、その最小表示文字数を保持するという方式です。
    *2:アクセント付き母音がありますので、仮に文字コードセットをUTF8にしています。また、ルビも抜いています。
    *3:-アクセント付き母音がありますので、仮に文字コードセットをUTF8にしています。また、ルビも抜いています。
      -エピグラムの各文の後ろのアンダーバーは実際は半角スペースです。
    *4 IE9、Google Chrome +では18全角、Safari 5.1.7では28全角の制限、Fire15.0.1では6全角半、Opera 11.62では7全角強が表示幅の最小でした。文字列の後方の隠れ方もそれぞれ異なっています。

    Comment by POKEPEEK2011 — 2012年9月30日 @ 6:33 PM

RSS feed for comments on this post. TrackBack URI

Leave a comment

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2024 aozorablog | powered by WordPress with Barecity