名前: 安田 日時: 2006-10-02 13:44:42 IPアドレス: 218.225.246.*
>>45219 稲垣さん、こんにちは。 >\leaveslavaccent では \ocs@enddocument なる定義が付加されています。安田さんの >テクニックを十分理解していませんが,\addto\noextras<lang> に \ocs@enddocument >のような定義があれば,何とかなるのでは,などと思うのですが。 舞台裏を見ていただけるのはちょっとお恥ずかしい.... \ocs@enddocument は、\end{document} に引き続き、aux ファイルの 処理が行われ、そこで分類コードの状態が本文の流れに対して矛盾があると エラーとなってしまうために、ドキュメントの末端で自動的に 記号の分類コードと記号に割り付けられていた命令とを復元するために 設けています。 Babel では \addto\extras<lang>, \addto\noextras<lang> でもちろん 分類コードの変更と復元を定義できます。 OldSlav は Babel 環境だけでなく独立した使い方もできるように、このあたりの 変更と復元を ldf ではなく共通のマクロ定義ファイルに書いています。 \setslavaccent, \leaveslavaccent はまさにその部分です。 同じような定義を ldf で定義して、\addto\[no]extra<lang> で呼び出す ようにすれば「無視される」ことはないと思います。 ただし「\catcode で分類コードを変更する命令」を定義する際、その命令を 定義する前に、以下の例のように分類コードを変更しておかなければ、 定義中の \catcode 変更が有効にならないという TeX の仕様があります。 稲垣さんが「無視されるようです」とおっしゃっているのは、このあたりと 関係しているのではないでしょうか。 \def\acuteaccent#1{% アクセント付加命令の定義 ......(略) } \begingroup \catcode`\'=\active\relax% 定義の前に予め ' をアクティブにしておく。 \gdef\catchangeandacuteaccent{% \catcode`\'=\active\relax% 命令の中で ' をアクティブにする。 \let'=\acuteaccent% アクセント付加命令を ' に代入する。 }% \endgroup % ここではグループから抜け出ているので ' は \active 変更以前の状態 \addto\extra<lang>{\catchangeandacuteaccent}% 外していたらすみません。 それではご自愛ください。
この書き込みへの返事: