version 1.454, 2014/08/25 00:20:19
|
version 1.456.2.4, 2019/05/17 15:41:32
|
Line 92 sub start_m {
|
Line 92 sub start_m {
|
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); |
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); |
if ($target eq 'web' || $target eq 'analyze') { |
if ($target eq 'web' || $target eq 'analyze') { |
&Apache::lonxml::debug("M is starting with:$inside:"); |
&Apache::lonxml::debug("M is starting with:$inside:"); |
|
if (!($inside =~ /^\s*\$.*\$\s*$/ || $inside =~ /^\s*\\[([].*\\[)\]]\s*$/)) { |
|
# Non-math LaTeX will not be rendered correctly with MathJax |
|
# and it should be avoided anyway. |
|
# On top of that, MathJax will render math without $, but |
|
# it will fail with tth. This is worth a warning. |
|
# (even though some people might just use latex for printing) |
|
&Apache::lonxml::warning(&mt("Missing \$ in <m>.")); |
|
} |
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); |
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); |
if ($eval eq 'on') { |
if ($eval eq 'on') { |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
Line 812 sub end_h1 {
|
Line 820 sub end_h1 {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $post='\vskip 0 mm '; |
my $post='\vskip 0 mm '; |
my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
my $align=lc(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1)); |
if ($align eq 'center') { |
if ($align eq 'center') { |
$post='\end{center}'; |
$post='\end{center}'; |
} elsif ($align eq 'left') { |
} elsif ($align eq 'left') { |
Line 2063 sub end_dt {
|
Line 2071 sub end_dt {
|
|
|
sub item_cleanup { |
sub item_cleanup { |
my $item=&Apache::lonxml::endredirection(); |
my $item=&Apache::lonxml::endredirection(); |
$item=~s/\\begin{center}//g; |
$item=~s/\\begin\{center}//g; |
$item=~s/\\end{center}//g; |
$item=~s/\\end\{center}//g; |
return $item; |
return $item; |
} |
} |
|
|
Line 2811 sub start_img {
|
Line 2819 sub start_img {
|
|
|
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
|
|
#if original bmp/gif/jpg/png file exist do following: |
#if original bmp/gif/jpg/png/svg file exist do following: |
my $origsrc=$src; |
my $origsrc=$src; |
my ($path,$file) = &get_eps_image($src); |
my ($path,$file) = &get_eps_image($src); |
# &Apache::lonnet::logthis("Image source: $src result: $path $file"); |
# &Apache::lonnet::logthis("Image source: $src result: $path $file"); |
Line 3450 sub start_caption {
|
Line 3458 sub start_caption {
|
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 3458 sub end_caption {
|
Line 3466 sub end_caption {
|
my ($target,$token) = @_; |
my ($target,$token) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 4325 sub get_eps_image {
|
Line 4333 sub get_eps_image {
|
&Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal. |
&Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal. |
} |
} |
&Apache::lonxml::debug("get_eps_image: Original image: $orig_src"); |
&Apache::lonxml::debug("get_eps_image: Original image: $orig_src"); |
my ($spath, $sname, $sext) = &fileparse($src, qr/\.(bmp|gif|png|jpg|jpeg)/i); |
my ($spath, $sname, $sext) = &fileparse($src, qr/\.(bmp|gif|png|jpg|jpeg|svg)/i); |
$src=~s/\.(bmp|gif|png|jpg|jpeg)$/\.eps/i; |
$src=~s/\.(bmp|gif|png|jpg|jpeg|svg)$/\.eps/i; |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
&Apache::lonxml::debug("Filelocation gives: $src"); |
&Apache::lonxml::debug("Filelocation gives: $src"); |
if (! -e $src) { |
if (! -e $src) { |
Line 4440 sub LATEX_length {
|
Line 4448 sub LATEX_length {
|
$garbage=~s/^\s+(\S.*)/$1/;#space before |
$garbage=~s/^\s+(\S.*)/$1/;#space before |
$garbage=~s/(.*\S)\s+$/$1/;#space after |
$garbage=~s/(.*\S)\s+$/$1/;#space after |
$garbage=~s/(\s)+/$1/;#only one space |
$garbage=~s/(\s)+/$1/;#only one space |
$garbage=~s/(\\begin{([^\}]+)}|\\end{([^\}]+)})//g;#remove LaTeX \begin{...} and \end{...} |
$garbage=~s/(\\begin\{([^\}]+)}|\\end\{([^\}]+)})//g;#remove LaTeX \begin{...} and \end{...} |
$garbage=~s/(\$\_\{|\$\_|\$\^{|\$\^|\}\$)//g;#remove $_{,$_,$^{,$^,}$ |
$garbage=~s/(\$\_\{|\$\_|\$\^\{|\$\^|\}\$)//g;#remove $_{,$_,$^{,$^,}$ |
$garbage=~s/([^\\])\$/$1/g;#$ |
$garbage=~s/([^\\])\$/$1/g;#$ |
$garbage=~s/(\\ensuremath\{\_\{|\\ensuremath\{\_|\\ensuremath\{\^{|\\ensuremath\{\^|\})//g;#remove \ensuremath{...} |
$garbage=~s/(\\ensuremath\{\_\{|\\ensuremath\{\_|\\ensuremath\{\^\{|\\ensuremath\{\^|\})//g;#remove \ensuremath{...} |
$garbage=~s/(\\alpha|\\beta|\\gamma|\\delta|\\epsilon|\\verepsilon|\\zeta|\\eta|\\theta|\\vartheta|\\iota|\\kappa|\\lambda|\\mu|\\nu|\\xi|\\pi|\\varpi|\\rho|\\varrho|\\sigma|\\varsigma|\\tau|\\upsilon|\\phi|\\varphi|\\chi|\\psi|\\omega|\\Gamma|\\Delta|\\Theta|\\Lambda|\\Xi|\\Pi|\\Sigma|\\Upsilon|\\Phi|\\Psi|\\Omega)/1/g; |
$garbage=~s/(\\alpha|\\beta|\\gamma|\\delta|\\epsilon|\\verepsilon|\\zeta|\\eta|\\theta|\\vartheta|\\iota|\\kappa|\\lambda|\\mu|\\nu|\\xi|\\pi|\\varpi|\\rho|\\varrho|\\sigma|\\varsigma|\\tau|\\upsilon|\\phi|\\varphi|\\chi|\\psi|\\omega|\\Gamma|\\Delta|\\Theta|\\Lambda|\\Xi|\\Pi|\\Sigma|\\Upsilon|\\Phi|\\Psi|\\Omega)/1/g; |
$garbage=~s/(\\pm|\\mp|\\times|\\div|\\cdot|\\ast|\\star|\\dagger|\\ddagger|\\amalg|\\cap|\\cup|\\uplus|\\sqcap|\\sqcup|\\vee|\\wedge|\\oplus|\\ominus|\\otimes|\\circ|\\bullet|\\diamond|\\lhd|\\rhd|\\unlhd|\\unrhd|\\oslash|\\odot|\\bigcirc|\\Box|\\Diamond|\\bigtriangleup|\\bigtriangledown|\\triangleleft|\\triangleright|\\setminus|\\wr)/1/g; |
$garbage=~s/(\\pm|\\mp|\\times|\\div|\\cdot|\\ast|\\star|\\dagger|\\ddagger|\\amalg|\\cap|\\cup|\\uplus|\\sqcap|\\sqcup|\\vee|\\wedge|\\oplus|\\ominus|\\otimes|\\circ|\\bullet|\\diamond|\\lhd|\\rhd|\\unlhd|\\unrhd|\\oslash|\\odot|\\bigcirc|\\Box|\\Diamond|\\bigtriangleup|\\bigtriangledown|\\triangleleft|\\triangleright|\\setminus|\\wr)/1/g; |
$garbage=~s/(\\le|\\ll|\\leq|\\ge|\\geq|\\gg|\\neq|\\doreq|\\sim|\\simeq|\\subset|\\subseteq|\\sqsubset|\\sqsubseteq|\\in|\\vdash|\\models|\\supset|\\supseteq|\\sqsupset|\\sqsupseteq|\\ni|\\dash|\\perp|\\approx|\\cong|\\equiv|\\propto|\\prec|\\preceq|\\parallel|\\asymp|\\smile|\\frown|\\bowtie|\\succ|\\succeq|\\mid)/1/g; |
$garbage=~s/(\\le|\\ll|\\leq|\\ge|\\geq|\\gg|\\neq|\\doreq|\\sim|\\simeq|\\subset|\\subseteq|\\sqsubset|\\sqsubseteq|\\in|\\vdash|\\models|\\supset|\\supseteq|\\sqsupset|\\sqsupseteq|\\ni|\\dash|\\perp|\\approx|\\cong|\\equiv|\\propto|\\prec|\\preceq|\\parallel|\\asymp|\\smile|\\frown|\\bowtie|\\succ|\\succeq|\\mid)/1/g; |
$garbage=~s/(\\not<|\\\\not\\le|\\not\\prec|\\not\\preceq|\\not\\subset|\\not\\subseteq|\\not\\sqsubseteq|\\not\\in|\\not>|\\not\\ge|\\not\\succ|\\notsucceq|\\not\\supset|\\notsupseteq|\\not\\sqsupseteq|\\notin|\\not=|\\not\\equiv|\\not\\sim|\\not\\simeq|\\not\\approx|\\not\\cong|\\not\\asymp)/1/g; |
$garbage=~s/(\\not<|\\\\not\\le|\\not\\prec|\\not\\preceq|\\not\\subset|\\not\\subseteq|\\not\\sqsubseteq|\\not\\in|\\not>|\\not\\ge|\\not\\succ|\\notsucceq|\\not\\supset|\\notsupseteq|\\not\\sqsupseteq|\\notin|\\not=|\\not\\equiv|\\not\\sim|\\not\\simeq|\\not\\approx|\\not\\cong|\\not\\asymp)/1/g; |
$garbage=~s/(\\leftarrow|\\gets|\\Leftarrow|\\rightarrow|\\to|\\Rightarrow|\\leftrightarrow|\\Leftrightarrow|\\mapsto|\\hookleftarrow|\\leftharpoonup|\\leftkarpoondown|\\rightleftharpoons|\\longleftarrow|\\Longleftarrow|\\longrightarrow|\\Longrightarrow|\\longleftrightarrow|\\Longleftrightarrow|\\longmapsto|\\hookrightarrow|\\rightharpoonup|\\rightharpoondown|\\uparrow|\\Uparrow|\\downarrow|\\Downarrow|\\updownarrow|\\Updownarrow|\\nearrow|\\searrow|\\swarrow|\\nwarrow)/11/g; |
$garbage=~s/(\\leftarrow|\\gets|\\Leftarrow|\\rightarrow|\\to|\\Rightarrow|\\leftrightarrow|\\Leftrightarrow|\\mapsto|\\hookleftarrow|\\leftharpoonup|\\leftkarpoondown|\\rightleftharpoons|\\longleftarrow|\\Longleftarrow|\\longrightarrow|\\Longrightarrow|\\longleftrightarrow|\\Longleftrightarrow|\\longmapsto|\\hookrightarrow|\\rightharpoonup|\\rightharpoondown|\\uparrow|\\Uparrow|\\downarrow|\\Downarrow|\\updownarrow|\\Updownarrow|\\nearrow|\\searrow|\\swarrow|\\nwarrow)/11/g; |
$garbage=~s/(\\aleph|\\hbar|\\imath|\\jmath|\\ell|\\wp|\\Re|\\Im|\\mho|\\prime|\\emptyset|\\nabla|\\surd|\\partial|\\top|\\bot|\\vdash|\\dashv|\\forall|\\exists|\\neg|\\flat|\\natural|\\sharp|\\\||\\angle|\\backslash|\\Box|\\Diamond|\\triangle|\\clubsuit|\\diamondsuit|\\heartsuit|\\spadesuit|\\Join|\\infty)/11/g; |
$garbage=~s/(\\aleph|\\hbar|\\imath|\\jmath|\\ell|\\wp|\\Re|\\Im|\\mho|\\prime|\\emptyset|\\nabla|\\surd|\\partial|\\top|\\bot|\\vdash|\\dashv|\\forall|\\exists|\\neg|\\flat|\\natural|\\sharp|\\\||\\angle|\\backslash|\\Box|\\Diamond|\\triangle|\\clubsuit|\\diamondsuit|\\heartsuit|\\spadesuit|\\Join|\\infty)/11/g; |
$garbage=~s/(\\hat{([^}]+)}|\\check{([^}]+)}|\\dot{([^}]+)}|\\breve{([^}]+)}|\\acute{([^}]+)}|\\ddot{([^}]+)}|\\grave{([^}]+)}|\\tilde{([^}]+)}|\\mathring{([^}]+)}|\\bar{([^}]+)}|\\vec{([^}]+)})/$1/g; |
$garbage=~s/(\\hat\{([^}]+)}|\\check\{([^}]+)}|\\dot\{([^}]+)}|\\breve\{([^}]+)}|\\acute\{([^}]+)}|\\ddot\{([^}]+)}|\\grave\{([^}]+)}|\\tilde\{([^}]+)}|\\mathring\{([^}]+)}|\\bar\{([^}]+)}|\\vec\{([^}]+)})/$1/g; |
#remove some other LaTeX command |
#remove some other LaTeX command |
$garbage=~s|\\(\w+)\\|\\|g; |
$garbage=~s|\\(\w+)\\|\\|g; |
$garbage=~s|\\(\w+)(\s*)|$2|g; |
$garbage=~s|\\(\w+)(\s*)|$2|g; |
Line 4552 sub latex_header {
|
Line 4560 sub latex_header {
|
($mode eq 'batchmode')) {$currentstring .='\batchmode';} |
($mode eq 'batchmode')) {$currentstring .='\batchmode';} |
$currentstring .= '\newcommand{\keephidden}[1]{}'. |
$currentstring .= '\newcommand{\keephidden}[1]{}'. |
'\renewcommand{\deg}{$^{\circ}$}'. |
'\renewcommand{\deg}{$^{\circ}$}'. |
'\usepackage{multirow}'. |
'\usepackage{multirow}'."\n". |
'\usepackage{longtable}'. |
'\usepackage{longtable}'."\n". |
'\usepackage{textcomp}'. |
'\usepackage{textcomp}'."\n". |
'\usepackage{makeidx}'. |
'\usepackage{makeidx}'."\n". |
'\usepackage[dvips]{graphicx}'. |
'\usepackage[dvips]{graphicx}'."\n". |
'\usepackage{wrapfig}'. |
'\usepackage{wrapfig}'."\n". |
'\usepackage{picins}'. |
'\usepackage{picins}'."\n". |
'\usepackage[T1]{fontenc}'."\n". |
'\usepackage[T1]{fontenc}'."\n". |
'\usepackage{lmodern}'."\n". |
'\usepackage{lmodern}'."\n". |
'\usepackage[postscript]{ucs}'."\n". |
'\usepackage[postscript]{ucs}'."\n". |
'\usepackage[utf8x]{inputenc}'."\n". |
'\usepackage[utf8x]{inputenc}'."\n". |
'\usepackage{pifont}' ."\n". |
'\usepackage{pifont}'."\n". |
'\usepackage{latexsym}'."\n". |
'\usepackage{latexsym}'."\n". |
'\usepackage{epsfig}'. |
'\usepackage{epsfig}'."\n". |
"\\usepackage{xtab}\n". |
'\usepackage{xtab}'."\n". |
"\\usepackage{tabularx}\n". |
'\usepackage{tabularx}'."\n". |
"\\usepackage{booktabs}\n". |
'\usepackage{booktabs}'."\n". |
"\\usepackage{array}\n". |
'\usepackage{array}'."\n". |
"\\usepackage{colortbl}\n". |
'\usepackage{colortbl}'."\n". |
"\\usepackage{xcolor}\n". |
'\usepackage{xcolor}'."\n". |
'\usepackage{calc}'. |
'\usepackage{calc}'."\n". |
'\usepackage{amsmath}'. |
'\usepackage{amsmath}'."\n". |
'\usepackage{soul}'. |
'\usepackage{soul}'."\n". |
'\usepackage{amssymb}'. |
'\usepackage{amssymb}'."\n". |
'\usepackage{amsfonts}'. |
'\usepackage{amsfonts}'."\n". |
'\usepackage{amsthm}'. |
'\usepackage{amsthm}'."\n". |
'\usepackage{amscd}' |
'\usepackage{amscd}'."\n". |
.'\usepackage{picins}\usepackage{calc}'."\n". # From lonprintout.pm |
'\usepackage{actuarialangle}'."\n"; |
'\usepackage[T1]{fontenc}'."\n". |
|
'\usepackage{lmodern}'."\n". |
|
'\usepackage[postscript]{ucs}'."\n". |
|
'\usepackage[utf8x]{inputenc}'."\n". |
|
'\usepackage{pifont}' . "\n"; |
|
|
|
if($env{'form.pdfFormFields'} eq 'yes') { |
if($env{'form.pdfFormFields'} eq 'yes') { |
$currentstring .= '\usepackage{hyperref}'. |
$currentstring .= '\usepackage{hyperref}'. |
'\usepackage{eforms}'. |
'\usepackage{eforms}'. |