Re: ntheorem.sty と日本語

名前: 本田
日時: 2006-09-24 12:24:19
IPアドレス: 222.158.121.*

>>45029 >に混乱していたところでした (^^;) 。 すみません(^^;; munepiさんも混乱させてしまったようです. 実験コードが絡み合ってしまってたという体たらくでした >次の例をご覧ください: 理解しました. それで,この ntheorem packageって相互参照使ってますね. 常に二回以上処理する癖があるのと 何にもメッセージがでない「寡黙」な仕様で 全然気がつきませんでした(^^;; さて・・・やっぱり厄介ですね こういうケースもおかしくなります \begin{prf} abc \[ x=y \] ああああ \end{prf} 今度は数式の右端にマークがつきますね. とまあ,夕べここまで考えてたんですが 朝起きるとこれを解決してた人がいたという体たらく. 「無保証でどう使ってもOK」とのことなので ご紹介しておきます. まったくすごいこと考えるものです(^^;; #とくに判定条件を書き換えるアイデア・・・ (1)オリジナルで水平モードかつ\lastskipで分岐させていたのは 別行立て数式``$$''の類のチェックである (2)欧文で終わった場合は\lastskipに正の値が入るが 和文では入らない(0になる) (3)したがって別行立て数式で環境が終わるときには 明らかに普通ではない負のグルーを挿入して (4)環境の終わりが,水平モードかつ\lastskipが0「以上」のとき (つまり通常の和文,欧文で終わっているとき)はマークをだし (5)それ以外のときはそれぞれの環境の再定義に処理を任せる というアルゴリズムのようです \everydisplay{\aftergroup\afterdisplayhack} \def\afterdisplayhack{% \ifx\InTheoType\None\else \hskip-1sp\relax\fi \def\@tempa{eqnarray}% \def\@tempb{eqnarray*}% \def\@tempc{equation}% \def\@tempc{displaymath}% \ifx\@currenvir\@tempa \aftergroup\@afterdisplayhack \else\ifx\@currenvir\@tempb \aftergroup\@afterdisplayhack \else\ifx\@currenvir\@tempc \aftergroup\@afterdisplayhack \else\ifx\@currenvir\@tempd \aftergroup\@afterdisplayhack \else \@afterdisplayhack \fi\fi\fi\fi} \def\@afterdisplayhack{\def\par{\unskip\@@par\@restorepar}} \def\@endtrivlist#1{% \if@inlabel \indent\fi \if@newlist \@noitemerr\fi \ifhmode %%% %%% #1 に“必要があれば,環境の終端の記号を出力する処理”が入り込む %%% %%% オリジナルでは,\lastskip が 0pt(以下)である,というのは %%% %%% $$...$$ の形式のディスプレイ数式(例えば,デフォルトの \[... \] が該当) %%% %%% の直後であると認識(それは正しいのだが,環境末に和文文字がある場合も %%% %%% それに該当するので問題が生じた). %%% \ifdim\lastskip >\z@ #1\unskip \par%%% original %%% \else \unskip \par \fi %%% original % %%% #1\unskip\par %%% 単純にこうすると,5 番目の例でうまくいかない. \ifdim\lastskip<\z@\else #1\fi \unskip\par \fi \if@noparlist \else \ifdim\lastskip >\z@ \@tempskipa\lastskip \vskip -\lastskip \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip \vskip\@tempskipa \fi \@endparenv \fi}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)