名前: . 日時: 2011-01-12 08:52:44 IPアドレス: 59.134.169.*
>>55553 とりあえず,次のようなものが知られているようです (ほかにもあるかもしれませんが,とりあえず今思い出せるもののみ挙げました). # 「新しい」機能に頼る,あるいは「そういうことが可能になるように処理系自体を # 拡張する」という方向での対処法についてはほかの方にお任せいたします. (方針 1) 行長を調べたい箇所の直前でいったん段落を終了させ,\lastbox を用いて 最後の行からなるボックスを取得し,(必要があれば \rightskip 等に由来するグル―を 削除したのち)そのボックスの幅を測定する. 実際の段落の作成処理では,「最後の行」を \unhbox で置き直して, そこから改めて段落を作り直す(その際,\parshape(\moveright,\moveleft)で 設定された行頭側余白の扱いに注意が必要(すなわち,list 環境内での挙動に 注意が必要)). [問題点]メイン垂直リスト内では \lastbox は使えないことにより, 割注を含む段落全体をなんらかのコマンドの引数あるいはなんらかの段落の中身にする (あるいはそれと同等の細工を施す)ことになり,いくぶん使いにくい. また,段落を本来終了しない位置で終了させてしまうため,行分割位置が 本来の位置とは変わる可能性がある. (方針 2) 行長を測定したい箇所の直後にダミーのディスプレイ数式を置き, その中で \predisplaysize を用いて行長を見積もる. [問題点]行長を測定した箇所でいったん行の中身が固定されてしまうため, 後続のテキストをスムーズに続けることができない. そのため,個々の割注に関して「行分割位置にかかるか否か」, 「かかるとすれば割注の途中のどこで分割すべきか」という点についての情報を なんらかの手段(例えば,相互参照の類)で取得し,その情報を用いて組み直す (そのときには行長の測定処理はやらない)といった細工を導入すると よいかもしれない(もっとも,その場合ユーザは「仮組み」と「本組み」を 行うことになりやはり面倒). # ルビ付き文字列が行頭・行中・行末のどこにあるかを判別するという問題に関しても, # 現在の行長を測定すれば(「文字通り」ではないにしろ)「ルビの位置の見当」を # つけることは可能でしょう.
この書き込みへの返事: