Re: フォーマットファイル

名前: しっぽ愛好家
日時: 2003-05-17 13:18:05
IPアドレス: 211.4.46.*

>>18742 過去に次のようなことをしたことはあります. なお,\uproot/\leftroot も導入しています. (したがって,amsmath パッケージとは衝突します.) %%% まれに,根号が ``くずれる'' 場合があるようですが, %%% その場合には \safesqrt を用いてください. \documentclass{jarticle} \makeatletter \newcount\leftroot@ \newcount\uproot@ \def\leftroot{\@latexerr{Invalid \string\leftroot}\@eha} \def\uproot{\@latexerr{Invalid \string\uproot}\@eha} \DeclareRobustCommand*\sqrt{% \bgroup \leftroot@\z@ \uproot@\z@ \@ifnextchar[\@osqrt\@nsqrt} \DeclareRobustCommand*\safesqrt{% \bgroup \let\@makesqrt\@noadjust@makesqrt \leftroot@\z@ \uproot@\z@ \@ifnextchar[\@osqrt\@nsqrt} \def\@nsqrt#1{\mathpalette\@makesqrt{#1}\egroup} \def\@osqrt[#1]#2{\root #1\of{#2}\egroup} \def\root#1\of{% \@get@root@shift#1\@nnil \setbox\rootbox\hbox{$\m@th\scriptscriptstyle{\@tempa}$}% \mathpalette\r@@t} \def\@get@root@shift{\futurelet\let@token\@get@root@shift@} \def\@get@root@shift@{% \def\next@{\@collect@root}% \ifx \let@token\uproot \def\next@{\@get@uproot}% \else\ifx\let@token\leftroot \def\next@{\@get@leftroot}% \else\ifx\let@token\@sptoken \def\next@{\@get@space@in@root}% \fi\fi\fi \next@} \def\@get@uproot#1\uproot#2{% \advance\uproot@#2\relax \@get@root@shift} \def\@get@leftroot#1\leftroot#2{% \advance\leftroot@#2\relax \@get@root@shift} \begingroup \def\:{\def\@get@space@in@root} \expandafter\endgroup\: {\@get@root@shift} \def\@collect@root#1\@nnil{\def\@tempa{#1}} \def\r@@t#1#2{% \setbox\z@\hbox{$\m@th\@makesqrt{#1}{#2}$}% \dimen@\ht\z@ \advance\dimen@-\dp\z@ \setbox\tw@\hbox{$\m@th#1\mskip\uproot@ mu$}% \advance\dimen@ by1.667\wd\tw@ \mkern-\leftroot@ mu\mkern5mu \raise.6\dimen@\copy\rootbox \mkern-10mu\mkern\leftroot@ mu \box\z@} \def\@@makesqrt#1#2{% \setbox\z@\hbox{$\m@th#1#2$}% \setbox\tw@\hbox{$\m@th#1\mkern50mu$}% \dimen@\wd\tw@ \@tempdima\dimen@ \advance\dimen@-\ht\z@ \advance\dimen@-\dp\z@ \ifdim\dimen@<\z@ \setbox\tw@\hbox{$\m@th#1\fixedsqrtsign$}% \dimen@\f@size\p@ \ifx#1\scriptscriptstyle \dimen@\defaultscriptscriptratio\dimen@ \fi \ifx#1\scriptstyle \dimen@\defaultscriptratio\dimen@ \fi \dimen@.125\dimen@ \advance\dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@-\dp\tw@ \divide\dimen@ 5\relax \ifdim\dimen@>\z@ \@tempdima\dimen@ \ifdim\@tempdima<\tw@\p@ \@tempdima\tw@\p@ \fi \advance\dimen@.1\p@ \advance\dimen@-\@tempdima \@tempdimb5\dimen@ \edef\@tempa{% \kern\the\dimen@ \raise\the\@tempdimb \hbox{\noexpand\line(1,5){\strip@pt\@tempdima}}}% \else \let\@tempa\@empty \fi \@tempdima\dp\tw@ \advance\@tempdima-\dp\z@ \advance\@tempdima-\ht\tw@ \setbox\tw@\hbox{% \unitlength\p@ \box\tw@ \@tempa}% \raise\@tempdima\box\tw@\nobreak\overline{\box\z@}% \else {#1\sqrtsign{#2}}% \fi} \def\@noadjust@makesqrt#1#2{{#1\sqrtsign{#2}}} \let\@makesqrt\@@makesqrt \DeclareMathSymbol\fixedsqrtsign\mathord{largesymbols}{'163} \makeatother \def\dfrac#1#2{\frac{\displaystyle#1}{\displaystyle#2}} \begin{document} $\sqrt[p]{p}$ and $\sqrt[\uproot{4}\leftroot{1}p]{p}$ \[ \sqrt{\dfrac{\int_0^x f(t)\,dt}{\int_0^{\infty} f(t)\,dt}} \quad \sqrt{ \dfrac{\dfrac{\int_0^x g(t)\,dt}{\int_0^{\infty} g(t)\,dt}} {\dfrac{\int_0^x f(t)\,dt}{\int_0^{\infty} f(t)\,dt}}} \] \end{document} 一方,専用フォントを用いる場合でも ``きちんと'' 設定すれば使えるはずですが… 例えば,cmex10.mf,mathex.mf,bigdel.mf の 3 ファイル(のコピー)をそれぞれ modcmex10.mf,modmathex.mf,modbigdel.mf とリネームし,それぞれに 次の変更を施します * modcmex10.mf 最終行の generate mathex % switch to the driver file を generate modmathex % switch to the driver file に変更します. * modmathex.mf 4 行目の input bigdel; % large delimiters を input modbigdel; % large delimiters に変更します. * modbigdel.mf 27 行目の charlist oct"160": oct"161": oct"162": oct"163": oct"164"; % radical signs を charlist oct"160": oct"161": oct"162": oct"163": oct"200": oct"201": oct"202": oct"203": oct"204": oct"205": oct"206": oct"207": oct"210": oct"211": oct"212": oct"213": oct"214": oct"215": oct"216": oct"217": oct"220": oct"221": oct"222": oct"223": oct"164"; % radical signs に変更します.さらに,ファイルの終わりの方にある cmchar "\Bigg radical sign"; beginchar(oct"163",18u#,rule_thickness#,5dh#-rule_thickness#); big_sqrt; endchar; という記述の直後に次の記述を追加します. cmchar "more big radical sign (1)"; beginchar(oct"200",18u#,rule_thickness#,6dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (2)"; beginchar(oct"201",18u#,rule_thickness#,7dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (3)"; beginchar(oct"202",18u#,rule_thickness#,8dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (4)"; beginchar(oct"203",18u#,rule_thickness#,9dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (5)"; beginchar(oct"204",18u#,rule_thickness#,10dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (6)"; beginchar(oct"205",18u#,rule_thickness#,11dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (7)"; beginchar(oct"206",18u#,rule_thickness#,12dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (8)"; beginchar(oct"207",18u#,rule_thickness#,13dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (9)"; beginchar(oct"210",18u#,rule_thickness#,14dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (10)"; beginchar(oct"211",18u#,rule_thickness#,15dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (11)"; beginchar(oct"212",18u#,rule_thickness#,16dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (12)"; beginchar(oct"213",18u#,rule_thickness#,17dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (13)"; beginchar(oct"214",18u#,rule_thickness#,18dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (14)"; beginchar(oct"215",18u#,rule_thickness#,19dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (15)"; beginchar(oct"216",18u#,rule_thickness#,20dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (16)"; beginchar(oct"217",18u#,rule_thickness#,21dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (17)"; beginchar(oct"220",18u#,rule_thickness#,22dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (18)"; beginchar(oct"221",18u#,rule_thickness#,23dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (19)"; beginchar(oct"222",18u#,rule_thickness#,24dh#-rule_thickness#); big_sqrt; endchar; cmchar "more big radical sign (20)"; beginchar(oct"223",18u#,rule_thickness#,25dh#-rule_thickness#); big_sqrt; endchar; 以上の変更の下で(もちろん,各ファイルを然るべきディレクトリにコピーした後) \documentclass{jarticle} \DeclareFontShape{OMX}{cmex}{m}{n}{<-> modcmex10}{} %%% 下記のフォント識別子は定義済みなので,一度 \relax にします. \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax \def\dfrac#1#2{\frac{\displaystyle#1}{\displaystyle#2}} \begin{document} \[ \sqrt{\dfrac{\int_0^x f(t)\,dt}{\int_0^{\infty} f(t)\,dt}} \quad \sqrt{ \dfrac{\dfrac{\int_0^x g(t)\,dt}{\int_0^{\infty} g(t)\,dt}} {\dfrac{\int_0^x f(t)\,dt}{\int_0^{\infty} f(t)\,dt}}} \] \end{document} あたりを処理するとどうでしょうか. %%% とりあえず,根号用の文字を 20 個ほど追加しました. %%% なお,使いそうもない記号を上書きするのではなく, %%% 文字コード 128 以降の空き領域を用いた方がよいでしょう. %%% %%% 何かの拍子に(例えば新傾向問題の解説用に)これまで %%% %%% 用いることのなかった記号を使うハメになる,ということは %%% %%% 考えられるのですから. %%% なお,私は事情を詳しくは知らないのですが, %%% ``根号の左側の部分に垂直な線分が用いられるようになるに至る前に %%% (...)^{1/2} の形式に書き換えるのが賢明である''(*) ということは %%% ふまえたうえで,あえて,上記のような出力を得ることを試みている %%% のでしょうか? %%% %%% (*) 真に ``教育的配慮'' を必要とする場合は %%% %%% この限りではありませんが.

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)