Ilya Zakharevich on Fri, 25 Apr 2003 02:27:52 -0700 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: \o3 glitch |
On Thu, Apr 24, 2003 at 07:13:52PM +0200, Karim BELABAS wrote: > Any obvious reason why the '%1 = ' bit is omitted ? > > Oh, that's gp -q, isn't it ? > > Anyway, now I can reproduce it: > > (19:10) geo-kb% echo '{{1}\over{x}}\n' |\ > tex2mail -TeX -noindent -ragged -by_par > Got finishing event `' in the outermost block, rest= at > /home/belabas/bin/perl/tex2mail line 431, <> chunk 1 > > [ '{1\over 2}' already exhibits the problem ] > > Apparently, -noindent is responsible (??): > > (19:10) geo-kb% echo '{{1}\over{x}}\n' |\ > tex2mail -TeX -ragged -by_par > 1 > - > x > > Ilya ? I took some time to fix many generic-mode (any TeX) shortcomings of tex2mail too. A lot of whitespace edits as well. Enjoy, Ilya --- ./misc/tex2mail-PRE Sat Feb 22 19:01:06 2003 +++ ./misc/tex2mail Fri Apr 25 02:16:52 2003 @@ -10,7 +10,7 @@ # # Options: # linelength=75 # Cut at this line -# maxdef=400 # definition loops: croak if many substitutions +# maxdef=400 # definition loops: croak if many substitutions # debug=0 # by_par=0 # Expect each paragraph to be terminated # # by *exactly* 2 "\n", and do not print @@ -18,10 +18,11 @@ # TeX # Assume it is not LaTeX # ragged # leave right ragged # noindent # assume \noindent everywhere +# ignorefonts # make math fonts (\mathfrak etc) into NOPs eval 'require "newgetopt.pl"; &NGetOpt("linelength=i","maxdef=i","debug=i","by_par", "TeX", - "ragged", "noindent")' + "ragged", "noindent", "ignorefonts")' || warn "Errors during parsing command line options" . ($@ ? ": $@" : '') . ".\n"; $linelength= $opt_linelength || 75; @@ -132,7 +133,7 @@ sub join { # The current line is contained in the array @out of records and, possibly, # one additional record $last. If $last exists, $islast is set to 1. -# The output channel length is contained in $linelength, the accumulated +# The output channel length is contained in $linelength, the accumulated # length of @out and $last is contained in $curlength. # We guaranty that if $curlength>$linelength, then @out is empty. @@ -142,7 +143,7 @@ sub length { (warn "Wrong format of a record `$_[0]'", return 0) unless $_[0] =~ /^\d+,(\d+)/; $1; -} +} # Gets a height of a record @@ -430,6 +431,7 @@ sub finish { } warn "Got finishing event `$event' in the outermost block, rest=$par" unless $#level; + return unless $#level; if ($#out<$chunks[$level[$#level]]) {push(@out,&empty);} # Make anything after $level[$#level] one chunk if there is anything warn "B:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; @@ -478,15 +480,19 @@ sub finish_ignore { # Special events: If number, wait this number of chunks sub start { - warn "Beginning with $_[0], $_[1]\n" if $debug & $debug_flow; + warn "Beginning with $_[0], $_[1]\n" if $debug & $debug_flow; warn "B:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; - if ($chunks[$level[$#level]]<=$#out && $chunks[$#chunks]<=$#out) { + warn "#out=$#out, chunks[first of last level]=$chunks[$level[$#level]], chunk +s[-1]=$chunks[$#chunks]" if $debug & $debug_flow; + + # !@chunks: may be true in \noindent{1\over2} + if (!@chunks || ($chunks[$level[$#level]]<=$#out && $chunks[$#chunks]<=$#out)) { # the last level is non empty - push(@chunks,$#out+1); - } - push(@level,$#chunks); - push(@tokenByToken,0); - $wait[$#level]=shift; + push(@chunks,$#out+1); + } + push(@level,$#chunks); + push(@tokenByToken,0); + $wait[$#level]=shift; if ($#_<0) {$action[$#level]="";} else {$action[$#level]=shift;} warn "a:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; } @@ -532,7 +538,7 @@ sub collapseOne { local($n)=(shift); local($out,$last,$_)=($out[$chunks[$n]]); if ($n==$#chunks) {$last=$#out;} else {$last=$chunks[$n+1]-1;} - warn "Collapsing_one $n, records $chunks[$n]..$last\n" + warn "Collapsing_one $n (last=$#chunks), records $chunks[$n]..$last\n" if $debug & $debug_flow; return unless $last>$chunks[$n]; warn "Collapsing chunk $n beginning at $chunks[$n], ending at $last\n" if $debug & $debug_flow; @@ -713,9 +719,55 @@ sub f_end { } else {&puts("\\end{$arg}");} } +sub f_newtheorem { + warn "Entering f_newtheorem...\n" if $debug & $debug_flow; + &trim(2); + &collapse(2); + &assertHave(2) || &finish("",1); + warn "Name `$out[$#out-1]'\nExpansion `$out[$#out]'\n__END__\n" if $debug & $debug_record; + + local($name, $expand) = ($out[$#out-1], $out[$#out]); + $#out -= 2; + $#chunks -= 2; + return unless $name =~ s/^\d+,\d+.\d+,\d+,//; + return unless $expand =~ s/^\d+,\d+.\d+,\d+,//; + $environment{$name}="par:unindent:puts;$expand. ,par"; + &finish(2,1); +} + +sub f_newtheorem1 { + warn "Entering f_newtheorem1...\n" if $debug & $debug_flow; + &trim(1); + &collapse(1); + &assertHave(1) || &finish("",1); + warn "Name `$out[$#out]'\n__END__\n" if $debug & $debug_record; + + local($name) = ($out[$#out]); + $#out -= 1; + $#chunks -= 1; + $par =~ s/^\[[^\]]*\]//; # Optional argument 2 + return unless $name =~ s/^\d+,\d+.\d+,\d+,//; + $last_newtheorem = $name; + &finish(1,1); +} + +sub f_newtheorem2 { + warn "Entering f_newtheorem2...\n" if $debug & $debug_flow; + &trim(2); + &collapse(2); + warn "Expansion `$out[$#out]'\n__END__\n" if $debug & $debug_record; + + local($expand) = ($out[$#out]); + $#out -= 2; + $#chunks -= 2; + $par =~ s/^\[[^\]]*\]//; # Optional argument 4 + return unless $expand =~ s/^\d+,\d+.\d+,\d+,//; + $environment{$last_newtheorem} = "par:unindent:puts;$expand. ,par"; + &finish(2,1); +} sub f_literal_no_length { - warn "Entering f_literal_with_length...\n" if $debug & $debug_flow; + warn "Entering f_literal_no_length...\n" if $debug & $debug_flow; # &trim(1); &collapse(1); &assertHave(1) || &finish("",1); @@ -781,23 +833,71 @@ sub f_radical { # Takes the last two records, returns a record that contains them and forms # fraction block -sub f_fraction { - warn "Entering f_fraction...\n" if $debug & $debug_flow; +sub arrow_fraction { + local($minlength, $l, $r, $flip) = @_; + warn "Entering arrow_fraction, minlength=$minlength, left=$l, right=$r...\n" if $debug & $debug_flow; &trim(2); &collapse(2); &assertHave(2) || &finish("",1); warn "Numer `$out[$#out-1]'\nDenom `$out[$#out]'\n__END__\n" if $debug & $debug_record; + local($l1,$l2)=(&length($out[$#out-1]),&length($out[$#out])); local($len)=(($l1>$l2 ? $l1: $l2)); - $out[$#out-1]=&vStack(&vStack(¢er($len,$out[$#out-1]), - &string2record("-" x $len)), - ¢er($len,$out[$#out])); + $len = $minlength if $len < $minlength; + local $line = $len <= 1? "-" : ($l . ("-" x ($len - 2)) . $r); + + if ($flip) { + $out[$#out-1]=&vStack(&vStack(¢er($len,$out[$#out]), + &string2record($line)), + ¢er($len,$out[$#out-1])); + } else { + $out[$#out-1]=&vStack(&vStack(¢er($len,$out[$#out-1]), + &string2record($line)), + ¢er($len,$out[$#out])); + } $#chunks--; $#out--; warn "a:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; &finish(2,1); } +sub f_fraction { + arrow_fraction(1,"-","-"); +} + +sub f_right_arrow { + arrow_fraction(3,"-",">",1); +} + +sub f_left_arrow { + arrow_fraction(3,"<","-",1); +} + +# Takes the last two records, returns a record that contains them and forms +# fraction block + +sub f_overset { + warn "Entering f_overset...\n" if $debug & $debug_flow; + &trim(2); + &collapse(2); + &assertHave(2) || &finish("",1); + warn "Over `$out[$#out-1]'\nBase `$out[$#out]'\n__END__\n" if $debug & $debug_record; + local($l1,$l2)=(&length($out[$#out-1]),&length($out[$#out])); + local($len)=(($l1>$l2 ? $l1: $l2)); + + local($b, $b1)=($out[$#out] =~ /^\d+,\d+,(\d+)/); + ($b1)=($out[$#out-1] =~ /^(\d+)/); + $b1 ||= 1; # height=0 means 1! + $b += $b1; + $out[$#out-1]=&vStack(¢er($len,$out[$#out-1]), + ¢er($len,$out[$#out])); + $#chunks--; + $#out--; + &setbaseline($out[$#out],$b); + warn "a:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; + &finish(2,1); +} + sub f_choose { warn "Entering f_choose...\n" if $debug & $debug_flow; &trim(2); @@ -880,27 +980,41 @@ sub paragraph { &puts($piece); } else { # macro or delimiter - ($pure = $piece) =~ s/\s+$//; + ($pure = $piece); + if ($pure =~ /^\\\s+$/) { + $pure =~ s/(\\\s)\s+$/$1/; + } else { + $pure =~ s/\s+$//; + } if (defined ($type=$type{$pure})) { if ($type eq "def") { - warn "To many def expansions in a paragraph" if $defcount++==$maxdef; - last if $defcount>$maxdef; - @t=(0); - for (1..$args{$pure}) { - push(@t,&get_balanced()); - } - warn "Defined token `$pure' found with $args{$pure} arguments @t[1..$#t]\n" - if $debug & $debug_parsing; - $sub=$def{$pure}; - $sub =~ s/(^|[^\\#])#(\d)/$1 . $t[$2]/ge if $args{$pure}; - $par=$sub . $par; + warn "To many def expansions in a paragraph" if $defcount++==$maxdef; + last if $defcount>$maxdef; + @t=(0); + for (1..$args{$pure}) { + push(@t,&get_balanced()); + } + warn "Defined token `$pure' found with $args{$pure} arguments @t[1..$#t]\n" + if $debug & $debug_parsing; + $sub=$def{$pure}; + $sub =~ s/(^|[^\\#])#(\d)/$1 . $t[$2]/ge if $args{$pure}; + $par=$sub . $par; } elsif ($type eq "sub") { - $sub=$contents{$pure}; - index($sub,";")>=0? - (($sub,$arg)=split(";",$sub,2), &$sub($pure,$arg)): - &$sub($pure); + $sub=$contents{$pure}; + index($sub,";")>=0? + (($sub,$arg)=split(";",$sub,2), &$sub($pure,$arg)): + &$sub($pure); } elsif ($type =~ /^sub(\d+)$/) { - &start($1,"f_$contents{$pure}"); + local($n) = $1; + $sub=$contents{$pure}; + if ($sub =~ s/^\[\]//) { + if ($par =~ /^\[/) { + $par =~ s/^\[([^\]]*)\]/{$1}/; + } else { + substr($par, 0, 0) = "{}"; + } + } + &start($n,"f_$sub"); $tokenByToken[$#level]=1; } elsif ($type =~ /^get(\d+)$/) { &start($1+1); @@ -914,14 +1028,14 @@ sub paragraph { } elsif ($type eq "self") { &puts(substr($pure,1) . ($pure =~ /^\\[a-zA-Z]/ ? " ": "")); } elsif ($type eq "par_self") { - &finishBuffer; - &commit("1,5,0,0, "); - &puts($pure . ($pure =~ /^\\[a-zA-Z]/ ? " ": "")); + &finishBuffer; + &commit("1,5,0,0, "); + &puts($pure . ($pure =~ /^\\[a-zA-Z]/ ? " ": "")); } elsif ($type eq "self_par") { &puts($pure . ($pure =~ /^\\[a-zA-Z]/ ? " ": "")); - &finishBuffer; - &commit("1,5,0,0, ") - unless $par =~ s/^\s*\\noindent(\s+|([^a-zA-Z\s])|$)/\2/; + &finishBuffer; + &commit("1,5,0,0, ") + unless $par =~ s/^\s*\\noindent(\s+|([^a-zA-Z\s])|$)/\2/; } elsif ($type eq "string") { &puts($contents{$pure},1); } elsif ($type eq "nothing") { @@ -1038,7 +1152,8 @@ sub f_putover { local($l2)=(&length($_[0])); local($len)=(($l1>$l2 ? $l1: $l2)); ($b1)=($_[0] =~ /^(\d+)/); - $b+=$b1+1; + $b1 ||= 1; # height=0 means 1! + $b+=$b1; $out[$#out]=&vStack(¢er($len,shift),¢er($len,$out[$#out])); #$out[$#out] =~ s/^(\d+,\d+,)(\d+)/\1$b/; &setbaseline($out[$#out],$b); @@ -1062,6 +1177,10 @@ sub f_putover_string { &f_putover(&string2record); } +sub f_putunder_string { + &f_putunder(&string2record); +} + sub f_widehat { &trim(1); &collapse(1); @@ -1071,15 +1190,82 @@ sub f_widehat { } sub f_widetilde { - &trim(1); + &trim(1); &collapse(1); local($l,$l1)=(&length($out[$#out])); if ($l<=1) {&f_putover(&string2record("~"));} - elsif ($l<=3) {&f_putover(&string2record("/\\/"));} - else {&f_putover(&string2record("/" . "~" x ($l1=int($l/2-1)) . + elsif ($l<=3) {&f_putover(&string2record("/\\/"));} + else {&f_putover(&string2record("/" . "~" x ($l1=int($l/2-1)) . "\\" . "_" x ($l-3-$l1) . "/"));} } +sub f_underbrace { + &trim(1); + &collapse(1); + local($l,$l1)=(&length($out[$#out])); + if ($l < 5) { $l = 5 } + &f_putunder(vStack(&string2record("\\" . "_" x ($l1=int($l/2-1)) . " " + . "_" x ($l-3-$l1) . "/"), + &string2record(" " x ($l1=int($l/2)) . "v" + . " " x ($l-2-$l1)))); +} + +sub f_underbrace2 { + &trim(2); + &collapse(2); + local($l,$l1)=(&length($out[$#out - 1])); + if ($l < 5) { $l = 5 } + local($b)=($out[$#out - 1] =~ /^\d+,\d+,(\d+)/); + $out[$#out-1] + = &vStack(¢er($l,$out[$#out-1]), + vStack(vStack(&string2record("\\" . "_" x ($l1=int($l/2-1)) . " " + . "_" x ($l-3-$l1) . "/"), + &string2record(" " x ($l1=int($l/2)) . "v" + . " " x ($l-2-$l1))), + ¢er($l,$out[$#out]))); + $#chunks--; + $#out--; + &setbaseline($out[$#out],$b); + warn "a:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; + &finish(2,1); +} + +sub f_overbrace { + &trim(1); + &collapse(1); + local($l)=(&length($out[$#out])); + if ($l < 6) { $l = 6 } + local($l1) = int($l/2); + &f_putover(vStack(&string2record(" " . "_" x ($l1 - 2) . "/\\" + . "_" x ($l-2-$l1) . " "), + &string2record("/" . " " x ($l1 - 2) . " " + . " " x ($l-2-$l1) . "\\"), + )); +} + +sub f_overbrace2 { + &trim(2); + &collapse(2); + local($l)=(&length($out[$#out - 1])); + if ($l < 5) { $l = 5 } + local($h,$b)=($out[$#out - 1] =~ /^(\d+),\d+,(\d+)/); + $h ||= 1; + local($l1) = int($l/2); + $out[$#out-1] + = &vStack(vStack(¢er($l,$out[$#out]), + vStack(&string2record(" " . "_" x ($l1 - 2) . "/\\" + . "_" x ($l-2-$l1) . " "), + &string2record("/" . " " x ($l1 - 2) . " " + . " " x ($l-2-$l1) . "\\"))), + ¢er($l,$out[$#out-1])); + $#chunks--; + $#out--; + local($h1) = ($out[$#out] =~ /^(\d+),/); + &setbaseline($out[$#out], $h1 - ($h - $b)); + warn "a:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; + &finish(2,1); +} + sub f_superscript { $wait[$#level]=2; $action[$#level]="f_superSub"; @@ -1087,7 +1273,7 @@ sub f_superscript { ($par !~ s:^\s*\\begin\s*\{Sb\}:\\begin\{matrix\}:)) { &commit(&empty); } -} +} sub let { $par =~ s/^($tokenpattern)(= ?)?($tokenpattern)//o; @@ -1123,6 +1309,17 @@ sub def_exp { &define($arg,$def); } +sub def_exp_block { + return unless $par =~ s:\{(\\([a-zA-Z]+|.))\}\{:\{:; + local($arg)=($1); + local($def,$act)=(&get_balanced()); + return unless defined $def; + return if index("$arg$def",'@')>=0; + return if $def =~ /\\([egx]?def|fi)([^a-zA-Z]|$)/; + $def .= " " if $def =~ /($macro)$/o; + &define($arg,$def); +} + # Arguments: Token . Parameters, Expansion sub define { @@ -1504,11 +1701,14 @@ sub over { local($prevw)=($wait[$#level-1]); $wait[$#level-1]="junk"; &finish("}", 1); - &collapse(1); - &assertHave(1) || &finish("",1); + &collapse(1); + warn "X:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; + &assertHave(1) || &finish("",1); + warn "Y:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; local($rec)=$out[$#out]; $#out--; $#chunks--; + warn "Z:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; &start(2,"f_fraction"); $wait[$#level-1]=$prevw; &start("}"); @@ -1612,6 +1812,34 @@ sub f_leftright { &finish(3); } +sub today { + &puts(scalar localtime); +} + +sub unindent { +# a:Last chunk number 0, last record 0, the first chunk +# on the last level=0 is 0, waiting for +# warn "B:Last $#chunks, the first on the last level=$#level is $level[$#level]" if $debug & $debug_flow; + # Silently ignore failures (XXXX sometimes $#chunks is 0, sometimes 1?!) + unless ($#chunks <= 1 && $#level == 0 && $level[$#level] == 0 + && $#out == 0 && $out[0] eq "1,5,0,0, " && $curlength == 5) { + return; + } + $out[0] = "1,0,0,0,"; + $curlength = 0; +} + +sub puts_unindent { + unindent(); + puts($_[1]); +} + +sub par_puts_unindent { + par(); + unindent(); + puts($_[1]); +} + # Arguments: Ascent, descent, base string, oneside expander, real expander # 0 1 2 3 4 # Top tip, Bottom tip, Mid @@ -1682,6 +1910,12 @@ $contents{"\\Delta"}="2,2,0,0," . <<'EOF ~~ EOF +$type{"\\nabla"}="record"; +$contents{"\\nable"}="2,2,1,0," . <<'EOF'; +__ +\/ +EOF + $type{"\\oplus"}="record"; $contents{"\\oplus"}="3,5,1,0," . <<'EOF'; _ @@ -1703,26 +1937,39 @@ $contents{"\\ominus"}="3,5,1,0," . <<'EO ~ EOF +$type{"\\odot"}="record"; +$contents{"\\odot"}="3,5,1,0," . <<'EOF'; + _ + (.) + ~ +EOF + $type{"\\leq"}="record"; -$contents{"\\leq"}="2,4,1,0," . <<'EOF'; +$contents{"\\leq"}="2,3,1,0," . <<'EOF'; _ < EOF $type{"\\equiv"}="record"; -$contents{"\\equiv"}="2,4,1,0," . <<'EOF'; +$contents{"\\equiv"}="2,3,1,0," . <<'EOF'; _ = EOF +$type{"\\not"}="record"; +$contents{"\\not"}="2,4,1,0," . <<'EOF'; + _ + | +EOF + $type{"\\geq"}="record"; -$contents{"\\geq"}="2,4,1,0," . <<'EOF'; +$contents{"\\geq"}="2,3,1,0," . <<'EOF'; _ > EOF $type{"\\partial"}="record"; -$contents{"\\partial"}="2,2,1,0," . <<'EOF'; +$contents{"\\partial"}="2,1,1,0," . <<'EOF'; \ d EOF @@ -1774,6 +2021,19 @@ $contents{"\\qed"}="2,6,1,0," . <<'EOF'; |_| EOF +$type{"\\Box"}="record"; +$contents{"\\Box"}="2,5,1,0," . <<'EOF'; + _ + |_| +EOF + +$type{"\\boxtimes"}="record"; +$contents{"\\boxtimes"}="3,5,1,0," . <<'EOF'; + _ + |X| + ~ +EOF + $type{"\\pm"}="record"; $contents{"\\pm"}="2,1,0,0," . <<'EOF'; + @@ -1839,19 +2099,39 @@ $contents{"\\buildrel"}="buildrel"; $type{"\\frac"}="sub2"; $contents{"\\frac"}="fraction"; +$type{"\\xrightarrow"}="sub2"; +$contents{"\\xrightarrow"}="[]right_arrow"; + +$type{"\\xleftarrow"}="sub2"; +$contents{"\\xleftarrow"}="[]left_arrow"; + +$type{"\\overset"}="sub2"; +$contents{"\\overset"}="overset"; + $type{"\\LITERALnoLENGTH"}="sub1"; $contents{"\\LITERALnoLENGTH"}="literal_no_length"; for ("text","operatorname","operatornamewithlimits","relax","-", "notag","!","/","protect","mathcal","Bbb","bf","it","em","boldsymbol", "cal","Cal","goth","ref","maketitle","expandafter","csname","endcsname", - "makeatletter","makeatother","topmatter","endtopmatter","rm", + "makeatletter","makeatother","topmatter","endtopmatter","rm", "tt", "NoBlackBoxes","document","TagsOnRight","bold","dsize","roster", "endroster","endkey","endRefs","enddocument","displaystyle", - "twelverm","tenrm","twelvefm","tenfm","hbox","mbox") { + "twelverm","tenrm","twelvefm","tenfm","hbox","mbox", "url", + "tableofcontents", "bigl", "bigr", "biggl", "biggr", "footnotesize", + "nonumber", "tiny", "sc", "huge", + ) { $type{"\\$_"}="nothing"; } -for ("par","endtitle","endauthor","endaffil","endaddress","endemail", + +if ($opt_ignorefonts) { + for ("mathbb", "mathit", "mathbit", "mathfrak", "frak", "mathbf", + ) { + $type{"\\$_"}="nothing"; + } +} + +for ("par","endtitle","endauthor","endaffil","endaddress","endemail","enddate", "endhead","key","medskip","smallskip","bigskip","newpage", "vfill","eject","endgraph") { $type{"\\$_"}="sub"; @@ -1866,6 +2146,9 @@ for ("endproclaim","enddemo",) { $type{"\\$_"}="self_par"; } +$type{"\\today"}="sub"; +$contents{"\\today"}="today"; + #$type{"&"}="nothing"; $type{"\\let"}="sub"; @@ -1874,6 +2157,9 @@ $contents{"\\let"}="let_exp"; $type{"\\def"}="sub"; $contents{"\\def"}="def_exp"; +$type{"\\newcommand"}="sub"; +$contents{"\\newcommand"}="def_exp_block"; + $type{"\\item"}="sub"; $contents{"\\item"}="item"; @@ -1936,6 +2222,12 @@ $contents{"\\v"}="putover_string;v"; $type{"\\widetilde"}="sub1"; $contents{"\\widetilde"}="widetilde"; +$type{"\\underbrace"}="sub2"; +$contents{"\\underbrace"}="underbrace2"; + +$type{"\\overbrace"}="sub2"; +$contents{"\\overbrace"}="overbrace2"; + $type{"\\~"}="sub1"; $contents{"\\~"}="putover_string;~"; @@ -1982,22 +2274,47 @@ for ('@',"_","\$","{","}","#","&","arcco $type{"\\$_"}="self"; } -for ("bibliography","myLabel","theoremstyle","theorembodyfont", +for ("bibliography","myLabel","theoremstyle","theorembodyfont", "usepackage", "bibliographystyle","hphantom","vphantom","phantom","hspace") { $type{"\\$_"}="discard1"; } -for ("numberwithin","newtheorem","renewcommand","setcounter" +for ("numberwithin","renewcommand","setcounter" ) { $type{"\\$_"}="discard2"; } +$type{"\\newenvironment"}="discard3"; +$type{"\\DeclareMathAccent"}="discard4"; +$type{"\\DeclareMathAlphabet"}="discard5"; + +#$type{"\\newtheorem"}="sub2"; +#$contents{"\\newtheorem"}="newtheorem"; + +$type{"\\NEWTHEOREMone"}="sub1"; +$contents{"\\NEWTHEOREMone"}="newtheorem1"; + +$type{"\\NEWTHEOREMtwo"}="sub2"; +$contents{"\\NEWTHEOREMtwo"}="[]newtheorem2"; + for ("equation","gather","align" ) {$environment{"$_"}="ddollar,ddollar";} for ("matrix","CD","smallmatrix" ) {$environment{"$_"}="matrix,endmatrix;1;c";} +# XXXX Noindent is needed somewhere... +for ("remark", "example", "theorem", "definition", "proof", "abstract", + "proposition", "amplification", "lemma", "corollary", + ) {$environment{"$_"}="par:unindent:puts;\U$_\E. ,par";} + +# \thanks inside \author confuse things a lot +for ("title", "author", "affil", "address", "email", "date", # "thanks", + "section", "subsection", "subsubsection") { + $type{"\\$_"}="sub"; + $contents{"\\$_"}="par_puts_unindent;\U$_: "; +} + for ("document","split","enumerate" ) {$environment_none{"$_"}++;} @@ -2006,6 +2323,7 @@ $environment{"Sb"}="subscript:matrix,end $environment{"Sp"}="superscript:matrix,endmatrix;1;l"; $environment{"eqnarray"}="ddollar:matrix,endmatrix;0;r;c;l:ddollar"; +$environment{"eqnarray*"}="ddollar:matrix,endmatrix;0;r;c;l:ddollar"; $environment{"split"}="ddollar:matrix,endmatrix;0;r;l:ddollar"; $environment{"multiline"}="ddollar:matrix,endmatrix;0;r;l:ddollar"; $environment{"align"}="ddollar:matrix,endmatrix;0;r;l:ddollar"; @@ -2027,6 +2345,9 @@ $contents{"\\,"}=" "; $type{"\\dots"}="string"; $contents{"\\dots"}="..."; +$type{"\\and"}="string"; +$contents{"\\and"}=" & "; + $type{"\\ldots"}="string"; $contents{"\\ldots"}="..."; @@ -2048,6 +2369,9 @@ $contents{"\\setminus"}=" \\ "; $type{"\\backslash"}="string"; $contents{"\\backslash"}="\\"; +$type{"\\iff"}="string"; +$contents{"\\iff"}=" <==> "; + $type{"\\approx"}="string"; $contents{"\\approx"}=" ~ "; @@ -2069,6 +2393,9 @@ $contents{"\\from"}=" <-- "; $type{"\\wedge"}="string"; $contents{"\\wedge"}="/\\"; +$type{"\\vee"}="string"; +$contents{"\\vee"}="\\/"; + $type{"\\Lambda"}="string"; $contents{"\\Lambda"}="/\\"; @@ -2102,6 +2429,12 @@ $contents{"\\rtimes"}=" ><| "; $type{"\\times"}="string"; $contents{"\\times"}=" >< "; +$type{"\\gg"}="string"; +$contents{"\\gg"}=" >> "; + +$type{"\\ll"}="string"; +$contents{"\\ll"}=" << "; + $type{"\\hookrightarrow"}="string"; $contents{"\\hookrightarrow"}=" c--> "; @@ -2135,42 +2468,72 @@ $contents{"\\cap"}=" /~\\ "; $type{"\\cup"}="string"; $contents{"\\cup"}=" \\_/ "; -$type{"\\section"}="string"; -$contents{"\\section"}="Section "; - -$type{"\\subsection"}="string"; -$contents{"\\subsection"}="Subsection "; - $type{"\|"}="string"; $contents{"\|"}="||"; $type{'\;'}="string"; $contents{'\;'}=" "; +$type{'\ '}="string"; +$contents{'\ '}=" "; + $type{'\noindent'}="string"; $contents{'\noindent'}=""; +$type{'\footnote'}="string"; +$contents{'\footnote'}=" FOOTNOTE: "; + +$type{'\enspace'}="string"; +$contents{'\enspace'}=" "; + +$type{"\\thanks"}="string"; +$contents{"\\thanks"}=" THANKS: "; + +$type{"\\vert"}="string"; +$contents{"\\vert"}=" | "; + +$type{"\\Vert"}="string"; +$contents{"\\Vert"}=" || "; + +$type{"\\ast"}="string"; +$contents{"\\ast"}=" * "; + +$type{"\\prime"}="string"; +$contents{"\\prime"}="'"; &define('\\define','\\def'); -&define('\\ge','\\geq'); -&define('\\le','\\leq'); -&define('\\ne','\\neq'); +&define('\\ge','\\geq '); +&define('\\le','\\leq '); +&define('\\ne','\\neq '); &define('\\langle','<'); &define('\\rangle','>'); -&define('\\subheading','\\par\\underline'); +&define('\\subheading','\\par\\underline '); &define('\\(','$'); &define('\\)','$'); &define('\\[','$$'); &define('\\]','$$'); &define('\\centerline#1','$$#1$$'); -&define('\\eqalign#1','\\aligned #1 \\endaligned'); +&define('\\eqalign#1','\\aligned #1 \\endaligned '); +&define('\\eqalignno#1','\\aligned #1 \\endaligned '); &define('\\cr','\\\\'); &define('\\sb','_'); &define('\\sp','^'); +&define('\\iint','\int\int '); +&define('\\iiint','\int\int\int '); &define('\\proclaim','\\noindent '); +&define('\\mathring','\\overset{\circ}'); +&define('\\binom#1#2','{#1\choose{}#2}'); +&define('\\bibitem#1','[#1]'); +&define('\\newline','\par '); +&define('\\newtheorem#1','\\NEWTHEOREMone{#1}\\NEWTHEOREMtwo '); &defb("matrix","vmatrix","Vmatrix","smallmatrix","bmatrix","Sp","Sb", "CD","align","aligned","split","multiline","gather","gathered"); +for ("documentclass", "documentstyle") { + $type{"\\$_"}="sub2"; + $contents{"\\$_"}="[]discard"; +} + if ($opt_TeX) { &define('\pmatrix#1','\left(\begin{matrix}#1\end{matrix}\right)'); } else { @@ -2236,3 +2599,9 @@ __END__ in fact the previous version did not work even there... If the added record is longer than line length, do not try to break the line before it... +# Apr 03: new option ignorefonts + Hanging `}' (e.g., caused by translation of \\ to \par) would break + processing of the rest of the file. + Could not treat fraction as the first thing on the line (\noindent + required). + Support many more macros.