Re: 数式famの制限とluatex

名前: 山本和義
日時: 2009-02-16 21:23:32
IPアドレス: 218.229.149.*

>>52744 ええ,第2弾(たぶんこれが最後)です.今度は math symbol が,数式fam16番以降で 動作するようにしてみました.omega による拡張が適用された lambda, lamed, LaTeX on luatex あたりで動作します.ただし,こちらの手元にある lambda, lamed の実行系で は,class7の動作がうまくいかない,つまり \math?? でフォントが変更されない という不具合があります.LaTeX on luatex なら完全動作します. マクロが長くなってきたので分離しましたが,テスト状態なのでパッケージ化はして いません.また,\documentclass文の前で読み込んでいるのは,単に気分の問題です. 最初の \count18=200 はこの位置にあるのがよいのでそれにつられたというところです. 完全なチェックなど全くできていないのですが,次のようにしたつもりです. 1) 数式fam番号が15番以下だと従来の命令を使います.したがってその状態である ならば(test.tex の最初の \count18=200 をコメントアウトした場合など), standard な latex, platex でも動作します. 2) math symbol の各種設定に LaTeX2e 標準命令を用いているならば,できる限り 正常に動作するようにしました.今回は,amssymb.sty がほぼ正常に動作することを 目指しています.package 側で「数式fam番号が15番以下であることを前提とする マクロ」を用いている場合には正常な動作は望めません. 3) amsfonts.sty の中で,\edef\yen{\noexpand\mathhexbox{\hexnumber@\symAMSa}55} という呼び出しがあります.これは変更したくないので,\hexnumber@ を変更しました (そしてそれを他の部分でも多用しています).これに関する副作用があるかもしれま せん. 4) test.tex において,あらかじめ多くの数式フォントが使われているように見せ かける細工がしてあります.最初の \count18=200 の部分を変更すればこの数が 変えられます.この状態だと,実際には多くの数式フォントは用いられてはいないの ですが,実際に使った例もチェックはしたので,このことに関してはうまく動作 していると考えています. では,ソースファイルです.3個あります. 注意: このまま使うのなら,LaTeX on luatex, lamed, lambda で処理してください. %%%% test.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \count18=200 % 既に201個使われた状態(数式fam番号200)にする \input{chg_mal.tex}% \input{chg_msy.tex}% \makeatletter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% \c@mv@.... の値を \count18+1 にセットする マクロ \def\setMVNtoSYN{% \begingroup \advance\count18\@ne \def\version@elt##1{% \csname c@\expandafter\@gobble\string##1\endcsname=\number\count18\relax }% \global\version@list \endgroup } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \makeatother \documentclass{article} \usepackage{amssymb} \pagestyle{empty} \AtBeginDocument{\setMVNtoSYN}% 必ず \begin{document} の直前で使うこと \begin{document} test for mathalphabet:\par $\mathbf{BOLD\ fam=\the\fam},\ \mathsf{SANS\ SERIF\ fam=\the\fam}$ \bigskip test for AMS-symbols:\par $\boxdot,\ \therefore,\ \nexists,\ \varsupsetneq\ \ \mathrm{symAMSa=\the\symAMSa,\ symAMSb=\the\symAMSb}$ $\yen,\ \rightleftharpoons,\ \ulcorner,\ \mho$ \end{document} %%%% END of test.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% chg_mal.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% from latex.ltx %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \makeatletter \def\document@select@group#1#2#3#4{% \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi {% \ifmmode % \ifnum\csname c@mv@\math@version\endcsname<\sixt@@n% 16個ではなく \ifnum\csname c@mv@\math@version\endcsname<\@cclvi% 256個にする \begingroup \escapechar\m@ne \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3% \globaldefs\@ne \math@fonts \endgroup \expandafter\extract@alph@from@version \csname mv@\math@version\expandafter\endcsname \expandafter{\number\csname c@mv@\math@version\endcsname}% #1% \global\advance\csname c@mv@\math@version\endcsname\@ne \else \let#1\relax \@latex@error{Too many math alphabets used in version \math@version}% \@eha \fi \else \expandafter\non@alpherr\fi #1{#4}% }% } \def\select@group#1#2#3#4{% \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi {% \ifmmode % \ifnum\csname c@mv@\math@version\endcsname<\sixt@@n% 16個ではなく \ifnum\csname c@mv@\math@version\endcsname<\@cclvi% 256個にする \begingroup \escapechar\m@ne \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3% \globaldefs\@ne \math@fonts \endgroup \init@restore@version \xdef#1{\noexpand\use@mathgroup\noexpand#2% {\number\csname c@mv@\math@version\endcsname}}% \global\advance\csname c@mv@\math@version\endcsname\@ne \else \let#1\relax \@latex@error{Too many math alphabets used in version \math@version}% \@eha \fi \else \expandafter\non@alpherr\fi #1{#4}% }% } \makeatother \endinput %%%% END of chg_mal.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% chg_msy.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% from latex.ltx %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \makeatletter %\def\new@mathgroup{\alloc@8\mathgroup\chardef\sixt@@n}% 16個ではなく \def\new@mathgroup{\alloc@8\mathgroup\chardef\@cclvi}% 256個にする %\def\set@mathchar#1#2#3#4{% % \global\mathcode`#2="\mathchar@type#3\hexnumber@#1#4\relax} \def\set@mathchar#1#2#3#4{% \ifnum#1<\sixt@@n \global\mathcode`#2="\mathchar@type#3\hexnumber@#1#4\relax \else \global\omathcode`#2="\mathchar@type#3\hexnumber@#100#4\relax \fi } %\def\set@mathsymbol#1#2#3#4{% % \global\mathchardef#2"\mathchar@type#3\hexnumber@#1#4\relax} \def\set@mathsymbol#1#2#3#4{% \ifnum#1<\sixt@@n \global\mathchardef#2"\mathchar@type#3\hexnumber@#1#4\relax \else \global\omathchardef#2"\mathchar@type#3\hexnumber@#100#4\relax \fi } %\def\set@mathaccent#1#2#3#4{% % \xdef#2{\mathaccent"\mathchar@type#3\hexnumber@#1#4\relax}} \def\set@mathaccent#1#2#3#4{% \ifnum#1<\sixt@@n \xdef#2{\mathaccent"\mathchar@type#3\hexnumber@#1#4\relax}% \else \xdef#2{\omathaccent"\mathchar@type#3\hexnumber@#100#4\relax}% } %\def\set@mathdelimiter#1#2#3#4#5#6{% % \xdef#3{\delimiter"\mathchar@type#4\hexnumber@#1#5% % \hexnumber@#2#6 }} \def\set@mathdelimiter#1#2#3#4#5#6{% \@tempswatrue \ifnum#1<\sixt@@n\else\@tempswafalse\fi \ifnum#2<\sixt@@n\else\@tempswafalse\fi \if@tempswa \xdef#3{\delimiter"\mathchar@type#4\hexnumber@#1#5\hexnumber@#2#6 }% \else \xdef#3{\odelimiter"\mathchar@type#4\hexnumber@#100#5"\hexnumber@#200#6 }% \fi } %\def\set@@mathdelimiter#1#2#3#4#5{% % \global\delcode`#3="\hexnumber@#1#4\hexnumber@#2#5\relax} \def\set@@mathdelimiter#1#2#3#4#5{% \@tempswatrue \ifnum#1<\sixt@@n\else\@tempswafalse\fi \ifnum#2<\sixt@@n\else\@tempswafalse\fi \if@tempswa \global\delcode`#3="\hexnumber@#1#4\hexnumber@#2#5\relax \else \global\odelcode`#3="\hexnumber@#100#4"\hexnumber@#200#5\relax \fi } \def\DeclareMathRadical#1#2#3#4#5{% \expandafter\ifx \csname\expandafter\@gobble\string#1\endcsname \relax \let#1\radical \fi \edef\reserved@a{\noexpand\in@{\string\radical}{\meaning#1}}% \reserved@a \ifin@ \expandafter\in@\csname sym#2\expandafter\endcsname \expandafter{\group@list}% \ifin@ \expandafter\in@\csname sym#4\expandafter\endcsname \expandafter{\group@list}% \ifin@ \begingroup \count\z@=#3\relax \count\tw@\count\z@ \divide\count\z@\sixt@@n \count@\count\z@ \multiply\count@\sixt@@n \advance\count\tw@-\count@ \edef\reserved@c{% \hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% \count\z@=#5\relax \count\tw@\count\z@ \divide\count\z@\sixt@@n \count@\count\z@ \multiply\count@\sixt@@n \advance\count\tw@-\count@ \edef\reserved@d{% \hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% % \xdef#1{\radical"\expandafter\hexnumber@ % \csname sym#2\endcsname\reserved@c % \expandafter\hexnumber@ % \csname sym#4\endcsname\reserved@d % \relax}% \expandafter\set@mathradical \csname sym#2\expandafter\endcsname\csname sym#4\endcsname#1% \reserved@c\reserved@d \endgroup \else \@latex@error{Symbol font `#4' is not defined}\@eha \fi \else \@latex@error{Symbol font `#2' is not defined}\@eha \fi \else \@latex@error{Command `\string#1' already defined}\@eha \fi } \def\set@mathradical#1#2#3#4#5{% \@tempswatrue \ifnum#1<\sixt@@n\else\@tempswafalse\fi \ifnum#2<\sixt@@n\else\@tempswafalse\fi \if@tempswa \xdef#3{\radical"\hexnumber@#1#4\hexnumber@#2#5\relax}% \else \xdef#3{\oradical"\hexnumber@#100#4"\hexnumber@#200#5\relax}% \fi } \@onlypreamble\set@mathradical %\def\mathhexbox#1#2#3{\mbox{$\m@th \mathchar"#1#2#3$}} \def\mathhexbox#1#2#3{% \count\z@="#1\relax \ifnum\count\z@<\sixt@@n \mbox{$\m@th \mathchar"#1#2#3$}% \else \mbox{$\m@th \omathchar"#100#2#3$}% \fi } %\def\hexnumber@#1{\ifcase\number#1 % 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or % 9\or A\or B\or C\or D\or E\or F\fi} \def\hexnumber@#1{% \ifnum#1<\sixt@@n \ifcase\number#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or A\or B\or C\or D\or E\or F \fi \else \ifcase\number#1 00\or 01\or 02\or 03\or 04\or 05\or 06\or 07\or 08\or 09\or 0A\or 0B\or 0C\or 0D\or 0E\or 0F\or 10\or 11\or 12\or 13\or 14\or 15\or 16\or 17\or 18\or 19\or 1A\or 1B\or 1C\or 1D\or 1E\or 1F\or 20\or 21\or 22\or 23\or 24\or 25\or 26\or 27\or 28\or 29\or 2A\or 2B\or 2C\or 2D\or 2E\or 2F\or 30\or 31\or 32\or 33\or 34\or 35\or 36\or 37\or 38\or 39\or 3A\or 3B\or 3C\or 3D\or 3E\or 3F\or 40\or 41\or 42\or 43\or 44\or 45\or 46\or 47\or 48\or 49\or 4A\or 4B\or 4C\or 4D\or 4E\or 4F\or 50\or 51\or 52\or 53\or 54\or 55\or 56\or 57\or 58\or 59\or 5A\or 5B\or 5C\or 5D\or 5E\or 5F\or 60\or 61\or 62\or 63\or 64\or 65\or 66\or 67\or 68\or 69\or 6A\or 6B\or 6C\or 6D\or 6E\or 6F\or 70\or 71\or 72\or 73\or 74\or 75\or 76\or 77\or 78\or 79\or 7A\or 7B\or 7C\or 7D\or 7E\or 7F\or 80\or 81\or 82\or 83\or 84\or 85\or 86\or 87\or 88\or 89\or 8A\or 8B\or 8C\or 8D\or 8E\or 8F\or 90\or 91\or 92\or 93\or 94\or 95\or 96\or 97\or 98\or 99\or 9A\or 9B\or 9C\or 9D\or 9E\or 9F\or A0\or A1\or A2\or A3\or A4\or A5\or A6\or A7\or A8\or A9\or AA\or AB\or AC\or AD\or AE\or AF\or B0\or B1\or B2\or B3\or B4\or B5\or B6\or B7\or B8\or B9\or BA\or BB\or BC\or BD\or BE\or BF\or C0\or C1\or C2\or C3\or C4\or C5\or C6\or C7\or C8\or C9\or CA\or CB\or CC\or CD\or CE\or CF\or D0\or D1\or D2\or D3\or D4\or D5\or D6\or D7\or D8\or D9\or DA\or DB\or DC\or DD\or DE\or DF\or E0\or E1\or E2\or E3\or E4\or E5\or E6\or E7\or E8\or E9\or EA\or EB\or EC\or ED\or EE\or EF\or F0\or F1\or F2\or F3\or F4\or F5\or F6\or F7\or F8\or F9\or FA\or FB\or FC\or FD\or FE\or FF \fi \fi } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \makeatother \endinput %%%% END of chg_msy.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

この書き込みへの返事:

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