summaryrefslogtreecommitdiff
path: root/info/symbols/comprehensive/source/makefakeMnSymbol
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/symbols/comprehensive/source/makefakeMnSymbol
Initial commit
Diffstat (limited to 'info/symbols/comprehensive/source/makefakeMnSymbol')
-rwxr-xr-xinfo/symbols/comprehensive/source/makefakeMnSymbol187
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
+;