diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/symbols/comprehensive/source/makefakeMnSymbol |
Initial commit
Diffstat (limited to 'info/symbols/comprehensive/source/makefakeMnSymbol')
-rwxr-xr-x | info/symbols/comprehensive/source/makefakeMnSymbol | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/info/symbols/comprehensive/source/makefakeMnSymbol b/info/symbols/comprehensive/source/makefakeMnSymbol new file mode 100755 index 0000000000..52d2457885 --- /dev/null +++ b/info/symbols/comprehensive/source/makefakeMnSymbol @@ -0,0 +1,187 @@ +#! /usr/bin/env perl + +# Convert MnSymbol.sty to a faked version that does not require +# the definition of any additional math alphabets +# +# By Scott Pakin <scott.clsl@pakin.org> + +use POSIX; +use warnings; +use strict; + +# Output some header boilerplate. +print "\%" x 43, "\n"; +print "\% This is a generated file. DO NOT EDIT. \%\n"; +print "\%" x 43, "\n"; +print "\n"; +print strftime("\\ProvidesPackage{fakeMnSymbol}[\%Y/\%m/\%d v1.0 faked version of MnSymbol.sty]\n", localtime()); + +# Read the font metrics for the largesymbol font in preparation for +# faking the variable-sized delimiters. +my $tfmfile = `kpsewhich MnSymbolE10.tfm`; +my @nextlarger; # Map from a character number to the next larger character +my @varchar; # Map from a character number to a varchar hash +if ($tfmfile ne "") { + chomp $tfmfile; + open (LARGESYMBOLS, "tftopl $tfmfile|") || die "tftopl $tfmfile: $!\n"; + my $charnum = -1; # Character number of the current character + while (my $oneline = <LARGESYMBOLS>) { + chomp $oneline; + if ($oneline =~ /^\(CHARACTER ([CO]) (\w+)/) { + $charnum = $1 eq "O" ? oct($2) : ord($2); + } + elsif ($oneline =~ /\(NEXTLARGER ([CO]) (\w+)/) { + $nextlarger[$charnum] = $1 eq "O" ? oct($2) : ord($2); + } + elsif ($oneline =~ /\((TOP|MID|BOT|REP) ([CO]) (\w+)/) { + $varchar[$charnum]->{$1} = $2 eq "O" ? oct($3) : ord($3); + } + } + close LARGESYMBOLS; +} + +# Process each symbol declaration in turn. +my $slot = 0; +my %families; +while (<>) { + # Process all symbols defined with \Decl@Mn@Char. + /\\Set\@Mn\@Sym\{(\d+)\}/ && do {$slot=0+$1; next}; + /^\\Decl\@Mn\@Char\\@?(\w+)\s*\{(\w+)\}/ && do { + my $symname = $1; + my $family = $2; + if ($family =~ /^MnSy(\w)$/) { + $family = "MnSymbol" . $1; + } + elsif ($family eq "symbols") { + $family = "MnSymbolF"; + } + else { + die "${0}: unrecognized symbol family \"$family\"\n"; + } + if (!defined $families{$family}) { + $families{$family}++; + print "\n"; + print "\\DeclareFontFamily{U}{$family}{}\n"; + print "\\DeclareFontShape{U}{$family}{m}{n}{<-> ${family}10}{}\n"; + } + print "\\DeclareRobustCommand{\\MNS$symname}"; + print "{\\mbox{\\usefont{U}{$family}{m}{n}\\char$slot}}\n"; + $slot++; + }; + + # Process variable-sized symbols specially. + /^\\Decl\@Mn\@(Open|Close|Delim)\s*\{([^\}]+)\}.*\{\'(\d+)\}\s*$/ && do { + my $charnum = oct $3; + my %sym2name = ("[" => "lbracket", + "]" => "rbracket", + "|" => "pipe", + "<" => "less", + ">" => "greater", + "/" => "slash", + "(" => "lparen", + ")" => "rparen"); + my $symname = substr($2, 0, 1) eq "\\" ? substr($2, 1) : $sym2name{$2}; + my $family = "MnSymbolE"; + if (!defined $families{$family}) { + $families{$family}++; + print "\n"; + print "\\DeclareFontFamily{U}{$family}{}\n"; + print "\\DeclareFontShape{U}{$family}{m}{n}{<-> ${family}10}{}\n"; + } + my $tcharnum; # Character number of the \big symbol size + my $dcharnum; # Character number of the variable-sized symbol + $tcharnum = defined $nextlarger[$charnum] ? $nextlarger[$charnum] : $charnum; + for ($dcharnum=$tcharnum; defined $nextlarger[$dcharnum]; $dcharnum=$nextlarger[$dcharnum]) { + } + + # Define the text-sized version of the delimiter. + print "\\DeclareRobustCommand{\\MNSt$symname}"; + print "{\\mbox{\\usefont{U}{$family}{m}{n}"; + if (defined $varchar[$tcharnum]) { + # Even the \big size is variable-sized. + my $rep = $varchar[$tcharnum]->{REP}; + my $top = $varchar[$tcharnum]->{TOP} || $rep; + my $bot = $varchar[$tcharnum]->{BOT} || $rep; + my $mid = $varchar[$tcharnum]->{MID} || $rep; + print "\\CLSLfaketdelim{$top}{$mid}{$bot}"; + } + else { + print "\\char$tcharnum"; + } + print "}}\n"; + + # Define the display-sized version of the delimiter. + print "\\DeclareRobustCommand{\\MNSd$symname}"; + print "{\\mbox{\\usefont{U}{$family}{m}{n}"; + my $rep = $varchar[$dcharnum]->{REP}; + if (defined $rep) { + my $top = $varchar[$dcharnum]->{TOP} || $rep; + my $bot = $varchar[$dcharnum]->{BOT} || $rep; + my $mid = $varchar[$dcharnum]->{MID} || $rep; + print "\\CLSLfakeddelim{$top}{$mid}{$bot}{$rep}"; + } + else { + print "\\char$dcharnum"; + } + print "}}\n"; + }; +} + +# Output some trailer boilerplate. +print <<'TRAILER'; + +% Redefine some problematic symbols. +\DeclareRobustCommand{\MNSdlparen}{\mbox{\usefont{U}{MnSymbolE}{m}{n}\char140}} +\DeclareRobustCommand{\MNSdrparen}{\mbox{\usefont{U}{MnSymbolE}{m}{n}\char145}} + +% The following symbols were renamed and adapted from MnSymbol.sty. +\let\MNSrelbar=\MNSleftrightline +\DeclareRobustCommand\MNSjoinrel{\mathrel{\mkern-12.4mu}} +\DeclareRobustCommand\MNSlongrightarrow{\DOTSB\MNSleftrightline\MNSjoinrel\MNSrightarrow} +\DeclareRobustCommand\MNSlongleftarrow{\DOTSB\MNSleftarrow\MNSjoinrel\MNSleftrightline} +\DeclareRobustCommand\MNSlongleftrightarrow{\DOTSB\MNSleftarrow\MNSjoinrel\MNSrightarrow} +\DeclareRobustCommand\MNSLongrightarrow{\DOTSB\MNSLeftrightline\MNSjoinrel\MNSRightarrow} +\DeclareRobustCommand\MNSLongleftarrow{\DOTSB\MNSLeftarrow\MNSjoinrel\MNSLeftrightline} +\DeclareRobustCommand\MNSLongleftrightarrow{\DOTSB\MNSLeftarrow\MNSjoinrel\MNSRightarrow} +\DeclareRobustCommand\MNSlongmapsto{\DOTSB\MNSleftfootline\MNSjoinrel\MNSrightarrow} +\DeclareRobustCommand\MNSemptyfilledspoon{\DOTSB\MNSleftspoon\mkern-13mu\MNSrightfilledspoon} +\DeclareRobustCommand\MNSfilledemptyspoon{\DOTSB\MNSleftfilledspoon\mkern-13mu\MNSrightspoon} +\DeclareRobustCommand\MNSlargeemptyfilledspoon{\DOTSB\mathrel{\MNScirc\mkern-3mu\MNSrelbar\mkern-3mu\MNSbullet}} +\DeclareRobustCommand\MNSlargefilledemptyspoon{\DOTSB\mathrel{\MNSbullet\mkern-3mu\MNSrelbar\mkern-3mu\MNScirc}} +\DeclareRobustCommand\MNScoloneq{\ensuremath{\mathrel{{\MNSvdotdot}{\MNSequal}}}} + +% The following accents were renamed and adapted from MnSymbol.sty. +\DeclareRobustCommand{\MNSoverbrace}[1]{\CLSLfakewidetopaccent{#1}{1.5ex}{'251}{2.1ex}{'253}{{U}{MnSymbolE}{m}{n}}} +\DeclareRobustCommand{\MNSunderbrace}[1]{\CLSLfakewidetopaccent{#1}{-1.7ex}{'256}{-1.7ex}{'260}{{U}{MnSymbolE}{m}{n}}} +\DeclareRobustCommand{\MNSwidehat}[1]{\CLSLfakewidetopaccent{#1}{0ex}{'302}{0.6ex}{'303}{{U}{MnSymbolE}{m}{n}}} +\DeclareRobustCommand{\MNSwidetilde}[1]{\CLSLfakewidetopaccent{#1}{0ex}{'307}{0.6ex}{'310}{{U}{MnSymbolE}{m}{n}}} +\DeclareRobustCommand{\MNSwideparen}[1]{\CLSLfakewidetopaccent{#1}{0ex}{'314}{0.6ex}{'315}{{U}{MnSymbolE}{m}{n}}} +\DeclareRobustCommand{\MNSvec}[1]{\CLSLfakewidetopaccent{#1}{0ex}{'321}{0ex}{'321}{{U}{MnSymbolE}{m}{n}}} +\def\MNSlinesegmentfill@{\arrowfill@\MNSleftfootline\MNSrelbar\MNSrightfootline} +\def\MNSleftharpoonfill@{\arrowfill@\MNSleftharpooncw\MNSrelbar\MNSrelbar} +\def\MNSrightharpoonfill@{\arrowfill@\MNSrelbar\MNSrelbar\MNSrightharpoonccw} +\DeclareRobustCommand{\MNSoverlinesegment}{\mathpalette{\overarrow@\MNSlinesegmentfill@}} +\DeclareRobustCommand{\MNSoverleftharpoon}{\mathpalette{\overarrow@\MNSleftharpoonfill@}} +\DeclareRobustCommand{\MNSoverrightharpoon}{\mathpalette{\overarrow@\MNSrightharpoonfill@}} +\DeclareRobustCommand{\MNSunderlinesegment}{\mathpalette{\underarrow@\MNSlinesegmentfill@}} +\def\MNSbracefill@#1#2#3#4#5{$\m@th#5#1\leaders\hbox{$#4$}\hfill#2\leaders\hbox{$#4$}\hfill#3$} +\def\MNSdowngroupfill@{\MNSbracefill@\MNSbraceld{}\MNSbracerd\MNSbracemid} +\def\MNSupgroupfill@{\MNSbracefill@\MNSbracelu{}\MNSbraceru\MNSbracemid} +\def\MNSoverbrace@#1#2#3{\vbox{\m@th\ialign{##\crcr + #1#2\crcr\noalign{\kern2\p@\nointerlineskip}% + $\m@th\hfil#2#3\hfil$\crcr}}} +\def\MNSunderbrace@#1#2#3{\vtop{\m@th\ialign{##\crcr + $\m@th\hfil#2#3\hfil$\crcr + \noalign{\kern2\p@\nointerlineskip}% + #1#2\crcr}}} +\def\MNSbraceld{\mbox{\usefont{U}{MnSymbolE}{m}{n}\char'263}} +\def\MNSbracelu{\mbox{\usefont{U}{MnSymbolE}{m}{n}\char'264}} +\def\MNSbracerd{\mbox{\usefont{U}{MnSymbolE}{m}{n}\char'265}} +\def\MNSbraceru{\mbox{\usefont{U}{MnSymbolE}{m}{n}\char'266}} +\def\MNSbracemid{\mbox{\usefont{U}{MnSymbolE}{m}{n}\char'271}} +\DeclareRobustCommand{\MNSovergroup}{\mathpalette{\MNSoverbrace@\MNSdowngroupfill@}} +\DeclareRobustCommand{\MNSundergroup}{\mathpalette{\MNSunderbrace@\MNSupgroupfill@}} + +\endinput +TRAILER +; |