LATEXDIFF(1)
โจ NAME โจ
latexdiff โ bestie, it determines and marks up differences between two latex files. That's the whole job. That's the assignment. ๐
(also, hi, this is the LATEXDIFF(1) page โ User Contributed Perl Documentation, section 1 of the manual, iykyk ๐ซถ)
๐ SYNOPSIS ๐
latexdiff [ OPTIONS ] old.tex new.tex > diff.tex
๐ DESCRIPTION ๐
okay so real quick: latexdiff is a utility program to aid in the management of revisions of latex documents. It compares two valid latex files, called here old.tex and new.tex, finds the significant differences between them โ and by significant we mean it's ignoring the number of white spaces and the position of line breaks, she does not care โ and then adds special commands to highlight those differences. Where visual highlighting isn't possible, like for changes in the formatting, the differences are nevertheless marked up in the source. No cap.
โ ๏ธ heads up bestie:old.texandnew.texneed to be real files (not pipes or similar) because they get opened twice โ unless the--encodingoption is used. ๐ญ
The program treats the preamble differently from the main document. Differences between the preambles are found using line-based differencing (similarly to the Unix diff command, but ignoring white spaces). A comment, "%DIF >" is appended to each added line, i.e. a line present in new.tex but not in old.tex. Discarded lines are deactivated by prepending "%DIF <". Changed blocks are preceded by comment lines giving information about line numbers in the original files. Where there are insignificant differences, the resulting file diff.tex will be similar to new.tex. At the end of the preamble, the definitions for latexdiff markup commands are inserted.
In differencing the main body of the text, latexdiff attempts to satisfy the following guidelines (in order of priority):
- If both
old.texandnew.texare valid LaTeX, then the resultingdiff.texshould also be valid LateX. (NB If a few plain TeX commands are used withinold.texornew.texthendiff.texis not guaranteed to work but usually will). - Significant differences are determined on the level of individual words. All significant differences, including differences between comments should be clearly marked in the resulting source code
diff.tex. - If a changed passage contains text or text-producing commands, then running
diff.texthrough LateX should produce output where added and discarded passages are highlighted. - Where there are insignificant differences, e.g. in the positioning of line breaks,
diff.texshould follow the formatting ofnew.tex
For differencing, the same algorithm as diff is used but words instead of lines are compared. An attempt is made to recognize blocks which are completely changed such that they can be marked up as a unit. Comments are differenced line by line but the number of spaces within comments is ignored. Commands including all their arguments are generally compared as one unit, i.e., no mark-up is inserted into the arguments of commands. However, for a selected number of commands (for example, \caption and all sectioning commands) the last argument is known to be text. This text is split into words and differenced just as ordinary text (use options to show and change the list of text commands, see below). As the algorithm has no detailed knowledge of LaTeX, it assumes all pairs of curly braces immediately following a command (i.e. a sequence of letters beginning with a backslash) are arguments for that command. As a restriction to condition 1 above it is thus necessary to surround all arguments with curly braces, and to not insert extraneous spaces. For example, write
\section{\textem{This is an emphasized section title}}
and not
\section {\textem{This is an emphasized section title}}
or
\section\textem{This is an emphasized section title}
even though all varieties are the same to LaTeX (but see --allow-spaces option which allows the second variety).
For environments whose content does not conform to standard LaTeX or where graphical markup does not make sense, all markup commands can be removed by setting the PICTUREENV configuration variable, set by default to picture and DIFnomarkup environments; see --config option). The latter environment (DIFnomarkup) can be used to protect parts of the latex file where the markup results in illegal markup. You have to surround the offending passage in both the old and new file by \begin{DIFnomarkup} and \end{DIFnomarkup}. You must define the environment in the preambles of both old and new documents. I prefer to define it as a null-environment,
\newenvironment{DIFnomarkup}{}{}
but the choice is yours. Any markup within the environment will be removed, and generally everything within the environment will just be taken from the new file.
It is also possible to difference files which do not have a preamble. In this case, the file is processed in the main document mode, but the definitions of the markup commands are not inserted.
All markup commands inserted by latexdiff begin with "\DIF". Added blocks containing words, commands or comments which are in new.tex but not in old.tex are marked by \DIFaddbegin and \DIFaddend. Discarded blocks are marked by \DIFdelbegin and \DIFdelend. Within added blocks all text is highlighted with \DIFadd like this: \DIFadd{Added text block} Selected safe commands can be contained in these text blocks as well (use options to show and change the list of safe commands, see below). All other commands as well as braces { and } are never put within the scope of \DIFadd. Added comments are marked by prepending "%DIF > ".
Within deleted blocks text is highlighted with \DIFdel. Deleted comments are marked by prepending "%DIF < ". Non-safe command and curly braces within deleted blocks are commented out with "%DIFDELCMD < ".
๐ OPTIONS ๐
๐ฆ Preamble ๐ฆ
The following options determine the visual markup style by adding the appropriate command definitions to the preamble. See the end of this section for a description of available styles.
--type=markupstyleor-t markupstyleโ Add code to preamble for selected markup style. This option defines\DIFaddand\DIFdelcommands. Available styles:"UNDERLINE CTRADITIONAL TRADITIONAL CFONT FONTSTRIKE INVISIBLE CHANGEBAR CCHANGEBAR CULINECHBAR CFONTCHBAR BOLD PDFCOMMENT"[ Default:"UNDERLINE"]--subtype=markstyleor-s markstyleโ Add code to preamble for selected style for bracketing commands (e.g. to mark changes in margin). This option defines\DIFaddbegin,\DIFaddend,\DIFdelbeginand\DIFdelendcommands. Available styles:"SAFE MARGIN COLOR DVIPSCOL ZLABEL ONLYCHANGEDPAGE (LABEL)*"[ Default:"SAFE"] * Subtype"LABEL"is deprecated ๐--floattype=markstyleor-f markstyleโ Add code to preamble for selected style which replace standard marking and markup commands within floats (e.g., marginal remarks cause an error within floats so marginal marking can be disabled thus). This option defines all\DIF...FLcommands. Available styles:"FLOATSAFE TRADITIONALSAFE IDENTICAL"[ Default:"FLOATSAFE"]--encoding=encor-e encโ Specify encoding of old.tex and new.tex. Typical encodings areascii,utf8,latin1,latin9. A list of available encodings can be obtained by executing
perl -MEncode -e 'print join ("\n",Encode-"encodings( ":all" )) ;' >
If this option is used, then old.tex, new.tex are only opened once. [Default encoding is utf8 unless the first few lines of the preamble contain an invocation \usepackage[..]{inputenc} in which case the encoding chosen by this command is asssumed. Note that ASCII (standard latex) is a subset of utf8]
--preamble=fileor-p fileโ Insert file at end of preamble instead of generating preamble. The preamble must define the following commands\DIFaddbegin, \DIFaddend, \DIFadd{..}, \DIFdelbegin,\DIFdelend,\DIFdel{..},and varieties for use within floats\DIFaddbeginFL, \DIFaddendFL, \DIFaddFL{..}, \DIFdelbeginFL, \DIFdelendFL, \DIFdelFL{..}(If this option is set -t, -s, and -f options are ignored.)--packages=pkg1,pkg2,..โ Tell latexdiff that .tex file is processed with the packages in list loaded. This is normally not necessary if the .tex file includes the preamble, as the preamble is automatically scanned for\usepackagecommands. Use of the--packagesoption disables automatic scanning, so if for any reason package specific parsing needs to be switched off, use--packages=none. The following packages trigger special behaviour:amsmathโ Configuration variable MATHARRREPL is set toalign*(Default:eqnarray*). (Note that many of the amsmath array environments are already recognised by default as such)endfloatโ Ensure that\begin{figure}and\end{figure}always appear by themselves on a line.hyperrefโ Change name of\DIFaddand\DIFdelcommands to\DIFaddtexand\DIFdeltexand define new\DIFaddand\DIFdelcommands, which provide a wrapper for these commands, using them for the text but not for the link defining command (where any markup would cause errors).apacite,biblatexโ Redefine the commands recognised as citation commands.siunitxโ Treat\SIas equivalent to citation commands (i.e. protect with\mboxif markup style uses ulem package.cleverefโ Treat\cref,\Cref, etc as equivalent to citation commands (i.e. protect with\mboxif markup style uses ulem package.glossariesโ Define most of the glossaries commands as safe, protecting them with \mbox'es where neededmhchemโ Treat\ceas a safe command, i.e. it will be highlighted (note that\ceewill not be highlighted in equations as this leads to processing errors)chemformulaorchemmacrosโ Treat\chas a safe command outside equations, i.e. it will be highlighted (note that\chwill not be highlighted in equations as this leads to processing errors)
[ Default: scan the preamble for \usepackage commands to determine loaded packages. ]
--show-preambleโ Print generated or included preamble commands to stdout.
๐ Configuration ๐
okay so this is where you get to tell latexdiff exactly which commands are its besties and which ones need to be handled with tweezers. read carefully, this section is long but it EATS ๐
--exclude-safecmd=exclude-file ,-Aexclude-file , or--exclude-safecmd="cmd1,cmd2,..."โ yeet commands out of the safe list--replace-safecmd=replace-file โ swap the whole safe list for your own--append-safecmd=append-file ,-aappend-file , or--append-safecmd="cmd1,cmd2,..."โ add more safe commands on top
These three do exactly what they say on the tin: they exclude from, replace, or append to the list of regular expressions (RegEx) matching commands which are safe to use within the scope of a \DIFadd or \DIFdel command. The file has to contain one Perl-RegEx per line (and comment lines that begin with # or % get ignored, no cap). Heads up bestie: the RegEx needs to match the whole of the token, i.e. /^regex$/ is implied, and the initial \ of the command is not included. Also, --exclude-safecmd and --append-safecmd can be combined with the ---replace-safecmd option, and they can be used repeatedly to add cumulatively to the lists.
--exclude-safecmd and --append-safecmd can also take a comma separated list as input. If a comma for one of the regex is required, escape it thus \,. In most cases it will be necessary to protect the comma-separated list from the shell by putting it in quotation marks.
--exclude-textcmd=exclude-file ,-Xexclude-file , or--exclude-textcmd="cmd1,cmd2,..."โ exclude text-arg commands--replace-textcmd=replace-file โ replace the text-arg command list--append-textcmd=append-file ,-xappend-file , or--append-textcmd="cmd1,cmd2,..."โ append to the text-arg command list
These exclude from, replace or append to the list of regular expressions matching commands whose last argument is text. See the entry for --exclude-safecmd directly above for further details (it's giving dรฉjร vu but it's on purpose, trust).
--replace-context1cmd=replace-file โ replace the context1 list--append-context1cmd=append-file or--append-context1cmd="cmd1,cmd2,..."โ append to the context1 list
Replace or append to the list of regex matching commands whose last argument is text but which require a particular context to work, e.g. \caption will only work within a figure or table. These commands behave like text commands, except when they occur in a deleted section, when they are disabled, but their argument is shown as deleted text. ๐ซถ
--replace-context2cmd=replace-file โ replace the context2 list--append-context2cmd=append-file or--append-context2cmd="cmd1,cmd2,..."โ append to the context2 list
As corresponding commands for context1. The only difference is that context2 commands are completely disabled in deleted sections, including their arguments. ๐ญ
context2 commands are also the only commands in the preamble, whose argument will be processed in word-by-word mode (which only works, if they occur no more than once in the preamble). The algorithm currently cannot cope with repeated context2 commands in the preamble, as they occur e.g. for the \author argument in some journal styles (not in the standard styles, though). If such a repetition is detected, the whole preamble will be processed in line-by-line mode. In such a case, use --replace-context2cmd option to just select the commands, which should be processed and are not used repeatedly in the preamble.
--exclude-mboxsafecmd=exclude-file or--exclude-mboxsafecmd="cmd1,cmd2,..."โ exclude mbox-safe commands--append-mboxsafecmd=append-file or--append-mboxsafecmd="cmd1,cmd2,..."โ append mbox-safe commands
Define safe commands, which additionally need to be protected by encapsulating in an \mbox{..}. This is sometimes needed to get around incompatibilities between external packages and the ulem package, which is used for highlighting in the default style UNDERLINE as well as CULINECHBAR CFONTSTRIKE. ๐ฎโ๐จ
--config var1=val1,var2=val2,...or-c var1=val1,..-c configfile
Set configuration variables. The option can be repeated to set different variables (as an alternative to the comma-separated list). Available variables (see below for further explanations):
"ARRENV"(RegEx)"COUNTERCMD"(RegEx)"CUSTODIFCMD"(RegEx)"FLOATENV"(RegEx)"ITEMCMD"(RegEx)"LISTENV"(RegEx)"MATHARRENV"(RegEx)"MATHARRREPL"(String)"MATHENV"(RegEx)"MATHREPL"(String)"MINWORDSBLOCK"(Integer)"PICTUREENV"(RegEx)"SCALEDELGRAPHICS"(Float)
--add-to-config varenv1=pattern1,varenv2=pattern2,...โ the soft-launch way to edit config vars
For configuration variables, which are a regular expression (essentially those ending in ENV, COUNTERCMD and CUSTOMDIFCMD, see list above) this option provides an alternative way to modify the configuration variables. Instead of setting the complete pattern, with this option it is possible to add an alternative pattern. "varenv" must be one of the variables listed above that take a regular expression as argument, and pattern is any regular expression (which might need to be protected from the shell by quotation). Several patterns can be added at once by using semi-colons to separate them, e.g. --add-to-config "LISTENV=myitemize;myenumerate,COUNTERCMD=endnote" โจ
--show-safecmdโ Print list of RegEx matching and excluding safe commands.--show-textcmdโ Print list of RegEx matching and excluding commands with text argument.--show-configโ Show values of configuration variables.--show-allโ Combine all--showcommands.
NB For all--showcommands, noold.texornew.texfile needs to be specified, and no differencing takes place. (iconic, honestly โ zero setup, just vibes)
๐ธ Other configuration options ๐ธ
--allow-spacesโ Allow spaces between bracketed or braced arguments to commands. Note that this option might have undesirable side effects (unrelated scope might get lumpeded with preceding commands) so should only be used if the default produces erroneous results. (Default requires arguments to directly follow each other without intervening spaces). ๐--math-markup=level โ Determine granularity of markup in displayed math environments. Possible values for level are (both numerical and text labels are acceptable):"off"or0: suppress markup for math environments. Deleted equations will not appear in diff file. This mode can be used if all the other modes cause invalid latex code."whole"or1: Differencing on the level of whole equations. Even trivial changes to equations cause the whole equation to be marked changed. This mode can be used if processing in coarse or fine mode results in invalid latex code."coarse"or2: Detect changes within equations marked up with a coarse granularity; changes in equation type (e.g.displaymath to equation) appear as a change to the complete equation. This mode is recommended for situations where the content and order of some equations are still being changed. [Default]"fine"or3: Detect small change in equations and mark up at fine granularity. This mode is most suitable, if only minor changes to equations are expected, e.g. correction of typos.
--graphics-markup=level โ Change highlight style for graphics embedded with\includegraphicscommands.
Possible values for level:
"none","off"or0: no highlighting for figures"new-only"or1: surround newly added or changed figures with a blue frame [Default if graphicx package loaded]"both"or2: highlight new figures with a blue frame and show deleted figures at reduced scale, and crossed out with a red diagonal cross. Use configuration variable SCALEDELGRAPHICS to set size of deleted figures.
Note that changes to the optional parameters will make the figure appear as changed to latexdiff, and this figure will thus be highlighted.
In some circumstances "Misplaced \noalign" error can occur if there are certain types of changes in tables. In this case please use --graphics-markup=none as a work-around. ๐
--disable-citation-markupor--disable-auto-mboxโ Suppress citation markup and markup of other vulnerable commands in styles using ulem (UNDERLINE,FONTSTRIKE,CULINECHBAR) (the two options are identical and are simply aliases)--enable-citation-markupor--enforce-auto-mboxโ Protect citation commands and other vulnerable commands in changed sections with\mboxcommand, i.e. use default behaviour for ulem package for other packages (the two options are identical and are simply aliases)
โญ Miscellaneous โญ
--verboseor-Vโ Output various status information to stderr during processing. Default is to work silently.--driver=type โ Choose driver for changebar package (only relevant for styles using changebar:CHANGEBARFONTCHBARCULINECHBARCHANGEBAR). Possible drivers are listed in changebar manual, e.g.pdftex,dvips,dvitops[Default:pdftex]--ignore-warningsโ Suppress warnings about inconsistencies in length between input and parsed strings and missing characters. These warning messages are often related to non-standard latex or latex constructions with a syntax unknown to"latexdiff"but the resulting difference argument is often fully functional anyway, particularly if the non-standard latex only occurs in parts of the text which have not changed. ๐--label=label or-Llabel โ Sets the labels used to describe the old and new files. The first use of this option sets the label describing the old file and the second use of the option sets the label for the new file, i.e. set both labels like this-L labelold -L labelnew. [Default: use the filename and modification dates for the label]--no-labelโ Suppress inclusion of old and new file names as comment in output file--visible-labelโ Include old and new filenames (or labels set with--labeloption) as visible output.--flattenโ Replace\inputand\includecommands within body by the content of the files in their argument. If\includeonlyis present in the preamble, only those files are expanded into the document. However, no recursion is done, i.e.\inputand\includecommands within included sections are not expanded. The included files are assumed to be located in the same directories as the old and new master files, respectively, making it possible to organise files into old and new directories.--flattenis applied recursively, so inputted files can contain further\inputstatements. Also handles files included by the import package (\importand\subimport), and\subfilecommand.
Use of this option might result in prohibitive processing times for larger documents, and the resulting difference document no longer reflects the structure of the input documents. ๐ซ
--filter-script=filterscriptโ ok bestie, this runs ur files through filterscript (full path preferred!!) before processing. The filterscript must take STDIN input and output to STDOUT. When u couple it with--flatten, each file gets run through the filter as it's brought in. ๐--ignore-filter-stderrโ when ur running with--filter-script, STDERR from the script can cause readability issues. Turn this flag on to ignore STDERR from the filter script. no more messy terminal, slay. ๐--helpor-hโ Show help text. iconic.--versionโ Show version number. periodt.
๐ ๏ธ Internal options ๐ ๏ธ
These options are mostly for automated use by latexdiff-vc. They can be used directly, but the API should be considered less stable than for the other options. iykyk.
--no-linksโ Suppress generation of hyperreferences, used for minimal diffs (option--only-changesoflatexdiff-vc). lowkey internal but here u go.
โจ Predefined styles โจ
๐ Major types ๐
The major type determines the markup of plain text and some selected latex commands outside floats by defining the markup commands \DIFadd{...} and \DIFdel{...}. the way that works? iconic.
UNDERLINEโ Added text is wavy-underlined and blue, discarded text is struck out and red (Requirescolorandulempackages). Overstriking does not work in displayed math equations such that deleted parts of equation are underlined, not struck out (this is a shortcoming inherent to theulempackage). rip math equations, fr.CTRADITIONALโ Added text is blue and set in sans-serif, and a red footnote is created for each discarded piece of text. (Requirescolorpackage)TRADITIONALโ LikeCTRADITIONALbut without the use of color.CFONTโ Added text is blue and set in sans-serif, and discarded text is red and very small size.FONTSTRIKEโ Added tex is set in sans-serif, discarded text small and struck out.CCHANGEBARโ Added text is blue, and discarded text is red. Additionally, the changed text is marked with a bar in the margin (Requirescolorandchangebarpackages).CFONTCHBARโ LikeCFONTbut with additional changebars (Requirescolorandchangebarpackages).CULINECHBARโ LikeUNDERLINEbut with additional changebars (Requirescolor,ulemandchangebarpackages).CHANGEBARโ No mark up of text, but mark margins with changebars (Requireschangebarpackage).INVISIBLEโ No visible markup (but generic markup commands will still be inserted.BOLDโ Added text is set in bold face, discarded is not shown.PDFCOMMENTโ Thepdfcommentpackage is used to underline new text, and mark deletions with a PDF comment. Note that this markup might appear differently or not at all based on the pdf viewer used. The viewer with best support for pdf markup is probablyacroread. This style is only recommended if the number of differences is small. acroread really said main character energy.
๐ธ Subtypes ๐ธ
The subtype defines the commands that are inserted at the begin and end of added or discarded blocks, irrespectively of whether these blocks contain text or commands (Defined commands: \DIFaddbegin, \DIFaddend, \DIFdelbegin, \DIFdelend)
SAFEโ No additional markup (Recommended choice) bestie pick this one.MARGINโ Mark beginning and end of changed blocks with symbols in the margin nearby (using the standard\marginparcommand - note that this sometimes moves somewhat from the intended position.COLORโ An alternative way of marking added passages in blue, and deleted ones in red. (It is recommeneded to use instead the main types to effect colored markup, although in some cases coloring with dvipscol can be more complete, for example with citation commands).DVIPSCOLโ An alternative way of marking added passages in blue, and deleted ones in red. Note thatDVIPSCOLonly works with the dvips converter, e.g. not pdflatex. (it is recommeneded to use instead the main types to effect colored markup, although in some cases coloring with dvipscol can be more complete).ZLABELโ can be used to highlight only changed pages, but requires post-processing. It is recommend to not call this option manually but uselatexdiff-vcwith--only-changesoption. Alternatively, use the script given within preamble of diff files made using this style.ONLYCHANGEDPAGEโ also highlights changed pages, without the need for post-processing, but might not work reliably if there is floating material (figures, tables).LABELโ is similar toZLABEL, but does not need the zref package and works less reliably (deprecated). deprecated bestie, be careful. ๐
๐ฆ Float Types ๐ฆ
Some of the markup used in the main text might cause problems when used within floats (e.g. figures or tables). For this reason alternative versions of all markup commands are used within floats. The float type defines these alternative commands.
FLOATSAFEโ Use identical markup for text as in the main body, but set all commands marking the begin and end of changed blocks to null-commands. You have to choose this float type if your subtype isMARGINas\marginpardoes not work properly within floats.TRADITIONALSAFEโ Mark additions the same way as in the main text. Deleted environments are marked by angular brackets\[and\]and the deleted text is set in scriptscript size. This float type should always be used with theTRADITIONALandCTRADITIONALmarkup types as the\footnotecommand does not work properly in floating environments.IDENTICALโ Make no difference between the main text and floats.
โ๏ธ Configuration Variables โ๏ธ
ARRENVโ If a match toARRENVis found within an inline math environment within a deleted or added block, then the inlined math is surrounded by\mbox{"..."}. This is necessary as underlining does not work within inlined array environments.
[ Default: "ARRENV"="(?:array|[pbvBV]matrix)"
COUNTERCMDโ If a command in a deleted block which is also in the textcmd list matchesCOUNTERCMDthen an additional command\addtocounter{"cntcmd"}{-1}, where cntcmd is the matching command, is appended in the diff file such that the numbering in the diff file remains synchronized with the numbering in the new file.
[ Default: "COUNTERCMD"="(?:footnote|part|section|subsection"
...
"|subsubsection|paragraph|subparagraph)" ]
CUSTOMDIFCMDโ This option is for advanced users and allows definition of special versions of commands, which do not work as safe commands.
Commands in CUSTOMDIFCMD that occur in added or deleted blocks will be given an ADD or DEL prefix. The prefixed versions of the command must be defined in the preamble, either by putting them in the preamble of at least the new file, or by creating a custom preamble file (Option --preamble). For example the command \blindtext (from package blindtext) does not interact well with underlining, so that for the standard markup type, it is not satisfactory to define it as a safe command. Instead, a customised versions without underlining can be defined in the preamble:
\newcommand{\DELblindtext}{{\color{red}\blindtext}}
\newcommand{\ADDblindtext}{{\color{blue}\blindtext}}
and then latexdiff should be invoked with the option -c CUSTOMDIFCMD=blindtext.
[ Default: none ]
FLOATENVโ Environments whose name matches the regular expression inFLOATENVare considered floats. Within these environments, the latexdiff markup commands are replaced by their FL variaties.
[ Default: "(?:figure|table|plate)[\w\d*@]*" ]
ITEMCMDโ Commands representing new item line with list environments.
[ Default: \"item" ]
LISTENVโ Environments whose name matches the regular expression inLISTENVare list environments.
[ Default: "(?:itemize|enumerate|description)" ]
MATHENV,MATHREPLโ If both\beginand\endfor a math environment (environment name matchingMATHENVor\[and\]) are within the same deleted block, they are replaced by a\beginand\endcommands forMATHREPLrather than being commented out.
[ Default: "MATHENV"="(?:displaymath|equation)" , "MATHREPL"="displaymath" ]
MATHARRENV,MATHARRREPLโ asMATHENV,MATHREPLbut for equation arrays
[ Default: "MATHARRENV"="eqnarray\*?" , "MATHREPL"="eqnarray" ]
MINWORDSBLOCKโ Minimum number of tokens required to form an independent block. This value is used in the algorithm to detect changes of complete blocks by merging identical text parts of less thanMINWORDSBLOCKto the preceding added and discarded parts.
[ Default: 3 ]
PICTUREENVโ Within environments whose name matches the regular expression inPICTUREENVall latexdiff markup is removed (in pathologic cases this might lead to inconsistent markup but this situation should be rare).
[ Default: "(?:picture|DIFnomarkup)[\w\d*@]*" ]
SCALEDELGRAPHICSโ If--graphics-markup=bothis chosen,SCALEDELGRAPHICSis the factor, by which deleted figures will be scaled (i.e. 0.5 implies they are shown at half linear size).
[ Default: 0.5 ]
VERBATIMENVโ RegEx describing environments like verbatim, whose contents should be taken verbatim. The content of these environments will not be processed in any way: deleted content is commented out, new content is not marked up
[ Default: "comment" ]
"VERBATIMLINEENV"โ the RegEx that describes environments like verbatim, whose contents should be taken verbatim. Whatever's inside an environment matched byVERBATIMLINEENVgets compared in line mode, and the changes get marked up with thelistingspackage. The markup style it uses is picked based on the mains markup type you chose (that's Option-t), or on an analysis of the preamble. Heads up bestie:"listings.sty"must be installed. If that file isn't found, the fallback is to treatVERBATIMLINEENVenvironments exactly the same way asVERBATIMENVenvironments.
[ Default: (?:verbatim[*]?|lstlisting ]
๐ฆ COMMON PROBLEMS AND FAQ ๐ฆ
Citations result in overfull boxes
Okay so here's the tea โ โ there's an incompatibility between the ulem package, which latexdiff uses for underlining and striking out in the UNDERLINE style (that's the default style, iykyk), and the way citations are generated. To be able to mark up citations properly, they get enclosed with an \mbox command. But mboxes cannot be broken across lines, so this procedure frequently results in overfull boxes, possibly obscuring the content as it extends beyond the right margin ๐ญ. The same thing happens for some other packages (e.g., siunitx). If this is a problem for you, you have two possibilities.
- Use
CFONTtype markup (option-t CFONT): if this markup is chosen, then changed citations are no longer marked up with the wavy line (additions) or struck out (deletions), but are still highlighted in the appropriate color, and deleted text is shown with a different font. Other styles not using theulempackage will also work. - Choose option
--disable-citation-markupwhich turns off the marking up of citations: deleted citations are no longer shown, and added citations are shown without markup. (This was the default behaviour of latexdiff at versions 0.6 and older)
For custom packages you can define the commands which need to be protected by \mbox with --append-mboxsafecmd and --excludemboxsafecmd options (submit your lists of command as feature request at github page to set the default behaviour of future versions, see section 6).
Changes in complicated mathematical equations result in latex processing errors
Try options --math-markup=whole. If even that fails, you can turn off mark up for equations with --math-markup=off.
How can I just show the pages where changes had been made
Use options -s ZLABEL (some postprocessing required) or -s ONLYCHANGEDPAGE. latexdiff-vc --ps|--pdf with --only-changes option takes care of the post-processing for you (requires zref package to be installed).
๐ BUGS ๐
Option allow-spaces not implemented entirely consistently. It breaks the rules that number and type of white space does not matter, as different numbers of inter-argument spaces are treated as significant.
Please submit bug reports using the issue tracker of the github repository page https://github.com/ftilmann/latexdiff.git, or send them to tilmann -- AT -- gfz-potsdam.de. Include the version number of latexdiff (from comments at the top of the source or use --version). If you come across latex files that are error-free and conform to the specifications set out above, and whose differencing still does not result in error-free latex, please send me those files, ideally edited to only contain the offending passage as long as that still reproduces the problem. If your file relies on non-standard class files, you must include those. I will not look at examples where I have trouble to latex the original files.
๐ SEE ALSO ๐
latexrevise, latexdiff-vc
๐ง PORTABILITY ๐ง
latexdiff does not make use of external commands and thus should run on any platform supporting Perl 5.6 or higher. If files with encodings other than ASCII or UTF-8 are processed, Perl 5.8 or higher is required.
The standard version of latexdiff requires installation of the Perl package Algorithm::Diff (available from www.cpan.org - http://search.cpan.org/~nedkonz/Algorithm-Diff-1.15) but a stand-alone version, latexdiff-so, which has this package inlined, is available, too. latexdiff-fast requires the diff command to be present.
๐ AUTHOR ๐
Version 1.3.2 Copyright (C) 2004-2021 Frederik Tilmann
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License Version 3
Contributors of fixes and additions: V. Kuhlmann, J. Paisley, N. Becker, T. Doerges, K. Huebner, T. Connors, Sebastian Gouezel and many others. Thanks to the many people who sent in bug reports, feature suggestions, and other feedback.
and that's the whole page bestie, we made it to the end ๐โจ this one was served up by perl v5.34.0 and dated 2022-07-14 โ go forth and diff your latex, you absolute icon ๐ ๐
๐ฆ where this page comes from
- debian bookworm: latexdiff 1.3.2-1 ยท GPL-3.0-only
- debian trixie: latexdiff 1.3.2-1 ยท GPL-3.0-only
- ubuntu noble: latexdiff 1.3.2-1 ยท GPL-3.0-only
- ubuntu questing: latexdiff 1.3.2-1
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms