diff options
author | Karl Berry <karl@freefriends.org> | 2013-06-26 22:57:37 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-06-26 22:57:37 +0000 |
commit | 74d78e4c6c1722395be36b5f5db73251a60c8928 (patch) | |
tree | 870fe7efe1324a3cb21ae7672062e9cbac753124 /Master/texmf-dist/doc/support | |
parent | 054a745be425b167321d2b5de8451ba62e30535c (diff) |
latexdiff (17jun13)
git-svn-id: svn://tug.org/texlive/trunk@30961 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/support')
-rw-r--r-- | Master/texmf-dist/doc/support/latexdiff/contrib/README.latexchanges | 13 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/latexdiff/contrib/latexchanges.py | 67 | ||||
-rwxr-xr-x | Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff-wrap | 192 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff.spec | 58 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/latexdiff/doc/example-diff.tex | 4 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/latexdiff/doc/latexdiff-man.pdf | bin | 193735 -> 283199 bytes | |||
-rwxr-xr-x | Master/texmf-dist/doc/support/latexdiff/latexdiff | 37 | ||||
-rwxr-xr-x | Master/texmf-dist/doc/support/latexdiff/latexdiff-fast | 37 |
8 files changed, 54 insertions, 354 deletions
diff --git a/Master/texmf-dist/doc/support/latexdiff/contrib/README.latexchanges b/Master/texmf-dist/doc/support/latexdiff/contrib/README.latexchanges deleted file mode 100644 index 4a027658444..00000000000 --- a/Master/texmf-dist/doc/support/latexdiff/contrib/README.latexchanges +++ /dev/null @@ -1,13 +0,0 @@ -latexchanges.py (Jan-Ake Larsson): -Here's a wrapper I wrote for latexdiff, intended as a drop-in -replacement for latex, when you have several numbered (or dated) -versions of a manuscript. My coauthors don't as a rule know what CVS or -SVN is, they simply use a number or date for the different versions. - -latexchanges replaces the current DVI with one that includes a -latexdiff to the last version. The last version is selected as the -TEX file in the same directory with the same prefix (up to a number -or a dot), that has an mtime immediately preceding the given TEX -file. - - diff --git a/Master/texmf-dist/doc/support/latexdiff/contrib/latexchanges.py b/Master/texmf-dist/doc/support/latexdiff/contrib/latexchanges.py deleted file mode 100644 index de7acbe8258..00000000000 --- a/Master/texmf-dist/doc/support/latexdiff/contrib/latexchanges.py +++ /dev/null @@ -1,67 +0,0 @@ -#! /bin/env python -# latexchanges -# -# Wrapper for latexdiff, intended as a drop-in replacement for latex, -# when you have several numbered (or dated) versions of a manuscript. -# My coauthors don't as a rule know what CVS or SVN is, they simply -# use a number or date for the different versions. -# -# latexchanges replaces the current DVI with one that includes a -# latexdiff to the last version. The last version is selected as the -# TEX file in the same directory with the same prefix (up to a number -# or a dot), that has an mtime immediately preceding the given TEX -# file. -# -# (I should probably add CVS version numbering too, at some point.) -# -# Copyright (C) 2009 by Jan-\AA{}ke Larsson <jan-ake.larsson@liu.se> -# Released under the terms of the GNU General Public License (GPL) -# Version 2. See http://www.gnu.org/ for details. -# -# Please do provide patches and bug reports, but remember: if it -# breaks, you get to keep the pieces. -# -# Jan-\AA{}ke Larsson -# Sept 16 2009 - -from os import listdir,system,stat -from sys import argv -from re import split - -name="" -newarg=[] - -# Find filename argument -for i in range(1,len(argv)): - if argv[i][-4:]==".tex": - basename=split('[0-9.]',argv[i])[0] - name=argv[i][:-4] - newarg.append(name+".changes.tex") - else: - newarg.append(argv[i]) - -if name: - print "Filename",name+".tex" - print "Prefix is",basename - # Find last archived version - mtime=stat(name+".tex").st_mtime - old_mtime=0 - ls=listdir(".") - for j in ls: - if j.startswith(basename) and j.endswith(".tex")\ - and not j.endswith(".changes.tex"): - tmptime=stat(j).st_mtime - if mtime>tmptime and old_mtime<tmptime: - oldname=j - old_mtime=tmptime - - # Archived version found? - if old_mtime>0: - print "Comparing with",oldname - system ("/bin/cp "+name+".aux "+name+".changes.aux") - system ("/bin/cp "+name+".bbl "+name+".changes.bbl") - system ("latexdiff "+oldname+" "+name+".tex > "+name+".changes.tex") - system ("latex "+" ".join(newarg)) - system ("cp "+name+".changes.dvi "+name+".dvi") - else: - system ("latex "+" ".join(argv[1:])) diff --git a/Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff-wrap b/Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff-wrap deleted file mode 100755 index 894b424de36..00000000000 --- a/Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff-wrap +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# -# latexdiff-wrap -# -# Wrapper for latexdiff, to -# * provide support for documents consiting of more than 1 latex file -# * provide my common arguments -# -# Copyright (C) by Volker Kuhlmann <VolkerKuhlmann@gmx.de> -# Released under the terms of the GNU General Public License (GPL) Version 2. -# See http://www.gnu.org/ for details. -# -# Volker Kuhlmann -# 5, 6, 7, 12, 16, 17 Oct 2005 -# 31 Jan; 5, 7, 13, 15 Feb 2006 -# - -VERSION="0.6, 15 Feb 2006" -AUTHOR="Volker Kuhlmann <VolkerKuhlmann@gmx.de>" -COPYRIGHT="Copyright (C) 2005-2006" - - -#### -#### Constants and initialised variables -# -diffcmd="latexdiff" -diffrc="$HOME/texmf/latexdiff" -#diffargs="-e latin1 --ignore-warnings -p latexdiff-preamble.sty" -diffargs="-e latin1 --ignore-warnings" -diffargs="$diffargs --append-safecmd $diffrc/safe-cmds" -diffargs="$diffargs --append-textcmd $diffrc/text-cmds" -# Note: Can't use multiple --append-safecmd -# show current command lists: -#diffcmd="$diffcmd --show-safecmd --show-textcmd --show-config" - - -#### -#### Version, Usage, Help -# -show_version() { - echo "${0##*/} version $VERSION -$COPYRIGHT by $AUTHOR" -} - -show_usage() { - echo " -Usage: ${0##*/} OLDDIR NEWDIR DIFFDIR [DIFFARGS --] FILE.tex [...] - ${0##*/} --show [DIFFARGS] -Version $VERSION -$COPYRIGHT by $AUTHOR -" -} - -show_help() { - show_usage - echo "\ -For each FILE.tex, build a new file DIFFDIR/FILE.tex with markup of the changes -which were made from OLDDIR/FILE.tex to NEWDIR/FILE.tex. -Any path given with FILE.tex is stripped off. -Any DIFFARGS are added to the latexdiff call, if present (remember to follow -them with a double-hyphen on its own before the FILE arguments). - -With --show, shows the settings latexdiff would be running with, including the -changes applied by the user. -" -} - -# For scripts not using function library only: -Version() { show_version; exitwith ErrVersion; } -Usage() { show_help; exitwith ErrUsage; } -Help() { test "$1" && exitwith ErrHelp show_help; show_help; exitwith ErrOK; } - - -#### -#### Error/Exit codes -# -exitwith() { - exec 1>&2 # write stdout on stderr instead - case "$1" in - ErrOK) - exit 0;; - ErrVersion|ErrUsage|ErrHelp) - # Output generated by function (program) $2, if given - test -n "$2" && "$2" - exit 1;; - # more codes in here - # more codes in here - ErrBadoption) - echo "Bad option '$2'." - echo "Call with -h for help." - exit 9;; - ErrMissingParameter) - echo "A required parameter for option $2 is missing." - echo "Call with -h for help." - exit 9;; - *) - echo "Internal error: exitwith() called with illegal error code '$1'." - exit 19;; - esac -} - - -#### -#### Parse command line parameters -# - -# If the next arg starts with a "-", collect additional argument for latexdiff -# until "--". -scanextraargs() { - addargs=() - case "$1" in -*) - while [ $# -gt 0 -a "$1" != "--" ]; do - addargs=( "${addargs[@]}" "$1" ) - shift - done - test "$1" == "--" && shift - ;; esac - fileargs=( "$@" ) -} - -case "$1" in - --version) Version;; - --usage) Usage;; - --help|-h|-help) Help;; - --show) - shift - scanextraargs "$@" - (set -x - $diffcmd $diffargs "${addargs[@]}" \ - --show-safecmd --show-textcmd --show-config - ) | fmt - exit $? ;; -esac - -olddir="${1%/}" -newdir="${2%/}" -diffdir="${3%/}" - -if ! [ -d "$olddir" -a -d "$newdir" -a -d "$diffdir" ]; then - Help 1>&2 err -fi - -shift 3 - -scanextraargs "$@" -set -- "${fileargs[@]}" - - - -#### -#### Functions -# -#set -x -Log() { echo 1>&2 "+ $@"; "$@"; } - - -#### -#### Main -# - -# Create output directory, just in case. -(set -x -mkdir -p "$diffdir" -) -while [ $# -gt 0 ]; do - file="${1##*/}" - echo Examining: "$file" - # No point running latexdiff if both files are identical, - # but run latexdiff on top-level LaTeX file in any case. - if cmp --quiet "$olddir/$file" "$newdir/$file" \ - && ! grep -lq '\\begin.*{document}' "$newdir/$file"; then - (set -x - cp -p "$olddir/$file" "$diffdir" - ) - else - # Delete file, to make sure it's not clobbered by redirecting stdout - # in case it's a symlink to te original. - test -f "$diffdir/$file" && (set -x - rm "$diffdir/$file" - ) - # Run latexdiff if both input files are present. - run=1 - test -f "$olddir/$file" || { echo 1>&2 "No file: $olddir/$file"; run=; } - test -f "$newdir/$file" || { echo 1>&2 "No file: $newdir/$file"; run=; } - test -n "$run" && \ - (set -x - $diffcmd $diffargs "${addargs[@]}" \ - "$olddir/$file" "$newdir/$file" > "$diffdir/$file" - ) - fi - shift -done diff --git a/Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff.spec b/Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff.spec deleted file mode 100644 index 9255a69fea9..00000000000 --- a/Master/texmf-dist/doc/support/latexdiff/contrib/latexdiff.spec +++ /dev/null @@ -1,58 +0,0 @@ -Summary: Diff for LaTeX files -Name: latexdiff -Version: 0.5 -Release: 1 -License: GPL -Group: Productivity/Publishing/TeX/Utilities -URL: http://www.tug.org/tex-archive/help/Catalogue/entries/latexdiff.html -Source0: %{name}.zip -BuildArch: noarch -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root -# only required for 'make install-ext' -# Requires: perl-Algorithm-Diff - - -%description -latexdiff is a Perl script, which compares two latex files and marks -up significant differences between them (i.e. a diff for latex files). - Various options are available for visual markup using standard latex -packages such as "color.sty". Changes not directly affecting visible -text, for example in formatting commands, are still marked in -the latex source. - -(C) 2004 Frederik Tilmann <tilmann@esc.cam.ac.uk> - - -%prep -%setup -n %{name} - - -%build -# quick had to adapt the Makefile -%{__mv} Makefile Makefile.old -%{__sed} \ - -e "s;INSTALLPATH = /usr/local;INSTALLPATH = \${DESTDIR}%{_prefix};" \ - -e "s;INSTALLMANPATH = \$(INSTALLPATH)/man;INSTALLMANPATH = \${DESTDIR}%{_mandir};" \ - Makefile.old > Makefile - - -%install -%{__mkdir_p} $RPM_BUILD_ROOT%{_bindir} -%{__mkdir_p} $RPM_BUILD_ROOT%{_mandir}/man1 - -%makeinstall - - -%clean -[ "${RPM_BUILD_ROOT}" != "/" ] && [ -d "${RPM_BUILD_ROOT}" ] && %{__rm} -rf "${RPM_BUILD_ROOT}" - - -%files -%defattr(-,root,root) -%doc example CHANGES LICENSE README -%{_bindir}/* -%{_mandir}/man*/* - -%changelog -* Thu Jan 4 2007 Till Dörges <till@doerges.net> - 0.5-1 -- Initial build. diff --git a/Master/texmf-dist/doc/support/latexdiff/doc/example-diff.tex b/Master/texmf-dist/doc/support/latexdiff/doc/example-diff.tex index 149588d2110..a4764813b58 100644 --- a/Master/texmf-dist/doc/support/latexdiff/doc/example-diff.tex +++ b/Master/texmf-dist/doc/support/latexdiff/doc/example-diff.tex @@ -1,7 +1,7 @@ \documentclass[12pt,a4paper]{article} %DIF LATEXDIFF DIFFERENCE FILE -%DIF DEL example-draft.tex Sat Nov 17 00:45:22 2012 -%DIF ADD example-rev.tex Sat Nov 17 00:45:22 2012 +%DIF DEL example-draft.tex Sun Jan 27 23:50:07 2013 +%DIF ADD example-rev.tex Sun Jan 27 23:50:07 2013 \setlength{\topmargin}{-0.2in} \setlength{\textheight}{9.5in} diff --git a/Master/texmf-dist/doc/support/latexdiff/doc/latexdiff-man.pdf b/Master/texmf-dist/doc/support/latexdiff/doc/latexdiff-man.pdf Binary files differindex a6b5a33aacd..30242d8b36a 100644 --- a/Master/texmf-dist/doc/support/latexdiff/doc/latexdiff-man.pdf +++ b/Master/texmf-dist/doc/support/latexdiff/doc/latexdiff-man.pdf diff --git a/Master/texmf-dist/doc/support/latexdiff/latexdiff b/Master/texmf-dist/doc/support/latexdiff/latexdiff index 7075561e119..febae2d5be1 100755 --- a/Master/texmf-dist/doc/support/latexdiff/latexdiff +++ b/Master/texmf-dist/doc/support/latexdiff/latexdiff @@ -22,6 +22,15 @@ # # Detailed usage information at the end of the file # +# Version 1.0.3 +# - fix bug in add_safe_commands that made latexdiff hang on DeclareMathOperator +# command in preamble +# - \(..\) inline math expressions were not parsed correctly, if the contained a linebreak +# - applied patch contributed by tomflannaghan via Berlios: [ Patch #3431 ] Adds correct handling of \left< and \right> +# - \$ is treated correctly as a literal dollar sign (thanks to Reed Cartwright and Joshua Miller for reporting this bug +# and sketching out the solution) +# - \^ and \_ are correctly interpreted as accent and underlined space, respectively, not as superscript of subscript (thanks to Wail Yahyaoui for pointing out this bug) +# # Version 1.0.1 - treat \big,\bigg etc. equivalently to \left and # \right - include starred version in MATHENV - apply # - flatten recursively and --flatten expansion is now @@ -83,8 +92,8 @@ my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION); my ($versionstring)=<<EOF ; -This is LATEXDIFF 1.0.2 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V) - (c) 2004-2012 F J Tilmann +This is LATEXDIFF 1.0.3 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V) + (c) 2004-2013 F J Tilmann EOF # Configuration variables: these have to be visible from the subroutines @@ -484,12 +493,12 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/); my $coords= '[\-.,\s\d]*'; # word: sequence of letters or accents followed by letter my $word='(?:[-\w\d*]|\\\\[\"\'\`~^][A-Za-z\*])+'; - my $cmdleftright='\\\\(?:left|right|[Bb]igg?[lrm]?|middle)\s*(?:[()\[\]|]|\\\\(?:[|{}]|\w+))'; + my $cmdleftright='\\\\(?:left|right|[Bb]igg?[lrm]?|middle)\s*(?:[<>()\[\]|]|\\\\(?:[|{}]|\w+))'; my $cmdoptseq='\\\\[\w\d\*]+'.$extraspace.'(?:(?:\['.$brat0.'\]|\{'. $pat6 . '\}|\(' . $coords .'\))'.$extraspace.')*'; my $backslashnl='\\\\\n'; my $oneletcmd='\\\\.\*?(?:\['.$brat0.'\]|\{'. $pat6 . '\})*'; - my $math='\$(?:[^$]|\\\$)*?\$|\\\\[(].*?\\\\[)]'; + my $math='\$(?:[^$]|\\\$)*?\$|\\\\[(](?:.|\n)*?\\\\[)]'; ## the current maths command cannot cope with newline within the math expression my $comment='%.*?\n'; @@ -723,7 +732,7 @@ sub add_safe_commands { # get rid of comments my $to_test = ""; # test for \DeclareMathOperator{\foo}{myoperator} - while ( $preamble =~ m/\DeclareMathOperator\s*\{\\(\w*?)\}/s) { + while ( $preamble =~ m/\DeclareMathOperator\s*\*?\{\\(\w*?)\}/osg) { $to_test=$1; if ($to_test ne "" and not iscmd($to_test,\@SAFECMDLIST,\@SAFECMDEXCL) and not iscmd($to_test, \@SAFECMDEXCL, [])) { # one should add $to_test to the list of safe commands. @@ -1428,7 +1437,7 @@ sub marktags { # #. change begin and end commands within comments to BEGINDIF, ENDDIF # so they don't disturb the pattern matching (if there are several \begin or \end in one line # 2. mark all first empty line (in block of several) with \PAR tokens -# 3. Convert all '\%' into '\PERCENTAGE ' to make parsing regular expressions easier +# 3. Convert all '\%' into '\PERCENTAGE ' and all '\$' into \DOLLAR to make parsing regular expressions easier # 4. Convert all \verb|some verbatim text| commands (where | can be an arbitrary character) # into \verb{hash} # 5. Convert \begin{verbatim} some verbatim text \end{verbatim} into \verbatim{hash} @@ -1461,14 +1470,15 @@ sub preprocess { s/\n(\s*?)\n((?:\s*\n)*)/\n$1\\PAR\n$2/g ; s/(?<!\\)\\%/\\PERCENTAGE /g ; # (?<! is negative lookbehind assertion to prevent \\% from being converted + s/(?<!\\)\\\$/\\DOLLAR /g ; # (?<! is negative lookbehind assertion to prevent \\$ from being converted s/(\\verb\*?)(\S)(.*?)\2/"${1}{". tohash(\%verbhash,"${2}${3}${2}") ."}"/esg; s/\\begin\{(verbatim\*?)\}(.*?)\\end\{\1\}/"\\${1}{". tohash(\%verbhash,"${2}") . "}"/esg; # Convert _n or _\cmd into \SUBSCRIPTNB{n} or \SUBSCRIPTNB{\cmd} and _{nnn} into \SUBSCRIPT{nn} - 1 while s/_([^{\\]|\\\w+)/\\SUBSCRIPTNB{$1}/g ; - 1 while s/_{($pat6)}/\\SUBSCRIPT{$1}/g ; + 1 while s/(?<!\\)_([^{\\]|\\\w+)/\\SUBSCRIPTNB{$1}/g ; + 1 while s/(?<!\\)_{($pat6)}/\\SUBSCRIPT{$1}/g ; # Convert ^n into \SUPERSCRIPTNB{n} and ^{nnn} into \SUPERSCRIPT{nn} - 1 while s/\^([^{\\]|\\\w+)/\\SUPERSCRIPTNB{$1}/g ; - 1 while s/\^{($pat6)}/\\SUPERSCRIPT{$1}/g ; + 1 while s/(?<!\\)\^([^{\\]|\\\w+)/\\SUPERSCRIPTNB{$1}/g ; + 1 while s/(?<!\\)\^{($pat6)}/\\SUPERSCRIPT{$1}/g ; # Convert $$ $$ into \begin{DOLLARDOLLAR} \end{DOLLARDOLLAR} s/\$\$(.*?)\$\$/\\begin{DOLLARDOLLAR}$1\\end{DOLLARDOLLAR}/sg; # Convert \[ \] into \begin{SQUAREBRACKET} \end{SQUAREBRACKET} @@ -1565,7 +1575,7 @@ sub fromhash { # 5. Convert \SUPERSCRIPTNB{n} into ^n and \SUPERSCRIPT{nn} into ^{nnn} # 6. Convert \SUBSCRIPTNB{n} into _n and \SUBCRIPT{nn} into _{nnn} # 7. Expand hashes of verb and verbatim environments -# 8. Convert '\PERCENTAGE ' back into '\%' +# 8. Convert '\PERCENTAGE ' back into '\%' and '\DOLLAR ' into '\$' # 9.. remove all \PAR tokens # 10. package specific processing: endfloat: make sure \begin{figure} and \end{figure} are always # on a line by themselves, similarly for table environment @@ -1801,6 +1811,8 @@ sub postprocess { s/\\(verbatim\*?)\{([-\d]*?)\}/"\\begin{${1}}".fromhash(\%verbhash,$2)."\\end{${1}}"/esg; # Convert '\PERCENTAGE ' back into '\%' s/\\PERCENTAGE /\\%/g; + # Convert '\DOLLAR ' back into '\$' + s/\\DOLLAR /\\\$/g; # remove all \PAR tokens (taking care to properly keep commented out PAR's # from introducing uncommented newlines - next line) s/(%DIF < )([^\n]*?)\\PAR\n/$1$2\n$1\n/sg; @@ -3205,8 +3217,11 @@ min Pr sec sup +[Hclbdruvt] (SUPER|SUB)SCRIPTNB (SUPER|SUB)SCRIPT +PERCENTAGE +DOLLAR %%END SAFE COMMANDS %%BEGIN TEXT COMMANDS diff --git a/Master/texmf-dist/doc/support/latexdiff/latexdiff-fast b/Master/texmf-dist/doc/support/latexdiff/latexdiff-fast index 310ecc4daef..e53afc12fe6 100755 --- a/Master/texmf-dist/doc/support/latexdiff/latexdiff-fast +++ b/Master/texmf-dist/doc/support/latexdiff/latexdiff-fast @@ -22,6 +22,15 @@ # # Detailed usage information at the end of the file # +# Version 1.0.3 +# - fix bug in add_safe_commands that made latexdiff hang on DeclareMathOperator +# command in preamble +# - \(..\) inline math expressions were not parsed correctly, if the contained a linebreak +# - applied patch contributed by tomflannaghan via Berlios: [ Patch #3431 ] Adds correct handling of \left< and \right> +# - \$ is treated correctly as a literal dollar sign (thanks to Reed Cartwright and Joshua Miller for reporting this bug +# and sketching out the solution) +# - \^ and \_ are correctly interpreted as accent and underlined space, respectively, not as superscript of subscript (thanks to Wail Yahyaoui for pointing out this bug) +# # Version 1.0.1 - treat \big,\bigg etc. equivalently to \left and # \right - include starred version in MATHENV - apply # - flatten recursively and --flatten expansion is now @@ -644,8 +653,8 @@ my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION); my ($versionstring)=<<EOF ; -This is LATEXDIFF 1.0.2 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V) - (c) 2004-2012 F J Tilmann +This is LATEXDIFF 1.0.3 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V) + (c) 2004-2013 F J Tilmann EOF # Configuration variables: these have to be visible from the subroutines @@ -1045,12 +1054,12 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/); my $coords= '[\-.,\s\d]*'; # word: sequence of letters or accents followed by letter my $word='(?:[-\w\d*]|\\\\[\"\'\`~^][A-Za-z\*])+'; - my $cmdleftright='\\\\(?:left|right|[Bb]igg?[lrm]?|middle)\s*(?:[()\[\]|]|\\\\(?:[|{}]|\w+))'; + my $cmdleftright='\\\\(?:left|right|[Bb]igg?[lrm]?|middle)\s*(?:[<>()\[\]|]|\\\\(?:[|{}]|\w+))'; my $cmdoptseq='\\\\[\w\d\*]+'.$extraspace.'(?:(?:\['.$brat0.'\]|\{'. $pat6 . '\}|\(' . $coords .'\))'.$extraspace.')*'; my $backslashnl='\\\\\n'; my $oneletcmd='\\\\.\*?(?:\['.$brat0.'\]|\{'. $pat6 . '\})*'; - my $math='\$(?:[^$]|\\\$)*?\$|\\\\[(].*?\\\\[)]'; + my $math='\$(?:[^$]|\\\$)*?\$|\\\\[(](?:.|\n)*?\\\\[)]'; ## the current maths command cannot cope with newline within the math expression my $comment='%.*?\n'; @@ -1284,7 +1293,7 @@ sub add_safe_commands { # get rid of comments my $to_test = ""; # test for \DeclareMathOperator{\foo}{myoperator} - while ( $preamble =~ m/\DeclareMathOperator\s*\{\\(\w*?)\}/s) { + while ( $preamble =~ m/\DeclareMathOperator\s*\*?\{\\(\w*?)\}/osg) { $to_test=$1; if ($to_test ne "" and not iscmd($to_test,\@SAFECMDLIST,\@SAFECMDEXCL) and not iscmd($to_test, \@SAFECMDEXCL, [])) { # one should add $to_test to the list of safe commands. @@ -1989,7 +1998,7 @@ sub marktags { # #. change begin and end commands within comments to BEGINDIF, ENDDIF # so they don't disturb the pattern matching (if there are several \begin or \end in one line # 2. mark all first empty line (in block of several) with \PAR tokens -# 3. Convert all '\%' into '\PERCENTAGE ' to make parsing regular expressions easier +# 3. Convert all '\%' into '\PERCENTAGE ' and all '\$' into \DOLLAR to make parsing regular expressions easier # 4. Convert all \verb|some verbatim text| commands (where | can be an arbitrary character) # into \verb{hash} # 5. Convert \begin{verbatim} some verbatim text \end{verbatim} into \verbatim{hash} @@ -2022,14 +2031,15 @@ sub preprocess { s/\n(\s*?)\n((?:\s*\n)*)/\n$1\\PAR\n$2/g ; s/(?<!\\)\\%/\\PERCENTAGE /g ; # (?<! is negative lookbehind assertion to prevent \\% from being converted + s/(?<!\\)\\\$/\\DOLLAR /g ; # (?<! is negative lookbehind assertion to prevent \\$ from being converted s/(\\verb\*?)(\S)(.*?)\2/"${1}{". tohash(\%verbhash,"${2}${3}${2}") ."}"/esg; s/\\begin\{(verbatim\*?)\}(.*?)\\end\{\1\}/"\\${1}{". tohash(\%verbhash,"${2}") . "}"/esg; # Convert _n or _\cmd into \SUBSCRIPTNB{n} or \SUBSCRIPTNB{\cmd} and _{nnn} into \SUBSCRIPT{nn} - 1 while s/_([^{\\]|\\\w+)/\\SUBSCRIPTNB{$1}/g ; - 1 while s/_{($pat6)}/\\SUBSCRIPT{$1}/g ; + 1 while s/(?<!\\)_([^{\\]|\\\w+)/\\SUBSCRIPTNB{$1}/g ; + 1 while s/(?<!\\)_{($pat6)}/\\SUBSCRIPT{$1}/g ; # Convert ^n into \SUPERSCRIPTNB{n} and ^{nnn} into \SUPERSCRIPT{nn} - 1 while s/\^([^{\\]|\\\w+)/\\SUPERSCRIPTNB{$1}/g ; - 1 while s/\^{($pat6)}/\\SUPERSCRIPT{$1}/g ; + 1 while s/(?<!\\)\^([^{\\]|\\\w+)/\\SUPERSCRIPTNB{$1}/g ; + 1 while s/(?<!\\)\^{($pat6)}/\\SUPERSCRIPT{$1}/g ; # Convert $$ $$ into \begin{DOLLARDOLLAR} \end{DOLLARDOLLAR} s/\$\$(.*?)\$\$/\\begin{DOLLARDOLLAR}$1\\end{DOLLARDOLLAR}/sg; # Convert \[ \] into \begin{SQUAREBRACKET} \end{SQUAREBRACKET} @@ -2126,7 +2136,7 @@ sub fromhash { # 5. Convert \SUPERSCRIPTNB{n} into ^n and \SUPERSCRIPT{nn} into ^{nnn} # 6. Convert \SUBSCRIPTNB{n} into _n and \SUBCRIPT{nn} into _{nnn} # 7. Expand hashes of verb and verbatim environments -# 8. Convert '\PERCENTAGE ' back into '\%' +# 8. Convert '\PERCENTAGE ' back into '\%' and '\DOLLAR ' into '\$' # 9.. remove all \PAR tokens # 10. package specific processing: endfloat: make sure \begin{figure} and \end{figure} are always # on a line by themselves, similarly for table environment @@ -2362,6 +2372,8 @@ sub postprocess { s/\\(verbatim\*?)\{([-\d]*?)\}/"\\begin{${1}}".fromhash(\%verbhash,$2)."\\end{${1}}"/esg; # Convert '\PERCENTAGE ' back into '\%' s/\\PERCENTAGE /\\%/g; + # Convert '\DOLLAR ' back into '\$' + s/\\DOLLAR /\\\$/g; # remove all \PAR tokens (taking care to properly keep commented out PAR's # from introducing uncommented newlines - next line) s/(%DIF < )([^\n]*?)\\PAR\n/$1$2\n$1\n/sg; @@ -3766,8 +3778,11 @@ min Pr sec sup +[Hclbdruvt] (SUPER|SUB)SCRIPTNB (SUPER|SUB)SCRIPT +PERCENTAGE +DOLLAR %%END SAFE COMMANDS %%BEGIN TEXT COMMANDS |