diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/labelschanged/labelschanged.dtx |
Initial commit
Diffstat (limited to 'macros/latex/contrib/labelschanged/labelschanged.dtx')
-rw-r--r-- | macros/latex/contrib/labelschanged/labelschanged.dtx | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/macros/latex/contrib/labelschanged/labelschanged.dtx b/macros/latex/contrib/labelschanged/labelschanged.dtx new file mode 100644 index 0000000000..0b71435fce --- /dev/null +++ b/macros/latex/contrib/labelschanged/labelschanged.dtx @@ -0,0 +1,315 @@ +% \iffalse meta-comment +% +% Packaged, documented, and maintained by Brian Dunn. +% +% Based on code by David Carlisle. +% +% In the public domain. +% +% \fi +% +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<package>\ProvidesPackage{labelschanged} +%<package> [2017/12/11 v1.0 Identifies endlessly-changing labels.] +% +%<*driver> +\documentclass{ltxdoc} + +\usepackage{labelschanged} + + +\usepackage{xcolor} +\definecolor{myurlcolor}{rgb}{0,0,.7} +\definecolor{mylinkcolor}{rgb}{.7,0,0} + +\usepackage[bookmarks=true,hidelinks,% +colorlinks,linkcolor=mylinkcolor,urlcolor=myurlcolor,% +pageanchor=true,hyperindex=true, +]{hyperref} + +\hypersetup{% +pdfinfo={% +Title={The Labelschanged Package},% +Author={Brian Dunn},% +Subject={LaTeX labels.},% +Keywords={LaTeX, labels, warning, changed}% +}} + +\DeclareRobustCommand{\pkg}[1]{\textsf{#1}} + +\setlength{\parindent}{0em} +\setlength{\parskip}{1.4ex} +\setcounter{secnumdepth}{0} + +\setcounter{IndexColumns}{2} + +\DisableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{labelschanged.dtx} +\end{document} +%</driver> +% \fi +% +% \iffalse +%<*package> +% \fi +% +% +% \CheckSum{19} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} + + + +% \changes{v1.0}{2017/12/11}{\ 2017/12/11: New pkg.} + + + +% \GetFileInfo{labelschanged.sty} +% +% \DoNotIndex{\newcommand,\renewcommand,\addtocounter,\begin,\end,\begingroup,\endgroup} +% \DoNotIndex{\global,\ifbool,\ifthenelse,\isequivalentto,\let} +% \DoNotIndex{\booltrue,\boolfalse} +% \expandafter\DoNotIndex\expandafter{\detokenize{\(,\),\,,\\,\#,\$,\%,\^,\_,\~,\ ,\&,\{,\}}} +% +% \begin{center} +% \thispagestyle{empty} +% \vfill +% \vfill +% \Huge The \textbf{labelschanged} package \medskip +% +% \bigskip +% +% \large +% Identifies labels which cause endless ``may have changed'' warnings, +% and also labels which are ``multiply-defined''. \\ +% +% \bigskip +% +% \normalsize \fileversion\ --- \filedate +% +% \footnotesize +% Packaged, documented, and maintained by \textsc{Brian Dunn}. +% +% In the public domain. +% +% \end{center} +% +% +% \thispagestyle{empty} +% +% +% \section{``Label(s) may have changed.''} +% +% Several conditions can cause \LaTeX\ labels to keep changing, +% no matter how many times a document is recompiled. +% \begin{description} +% \item[Dynamic references:] Some packages, such as \pkg{varioref}, +% generate text references which dynamically change depending on the location +% of each float, and these changing messages may then cause the floats themselves to move. +% +% \item[Margin/foot notes:] References in margin or foot notes may have a similar effect. +% +% \item[Active characters:] Due to the way changing labels are detected, +% problems may also be caused by active characters in captions or section names. +% \end{description} +% +% In these circumstances, the warning +% \begin{quote} +% \small +% \texttt{LaTeX Warning: \\ +% Label(s) may have changed. Rerun to get cross-references right.} +% \end{quote} +% reoccurs despite multiple document re-compiles. +% Locating the problem labels may be difficult, as there may not be any message +% identifying which labels have changed. +% +% +% \section{Locating the changing labels} +% +% In the preamble of the document, place: +% \begin{quote} +% \ttfamily +% \cs{usepackage}\{labelschanged\} +% \end{quote} +% The \pkg{labelschanged} package will print the names of the labels which changed, +% and their associated definitions before and after the recompile. +% \begin{quote} +% \ttfamily +% Label `xyz' has changed: \\ +% \rmfamily\small +% \textless{}before/after comparisons\textgreater +% \end{quote} +% +% +% \section{Solutions} +% +% \begin{description} +% \item[Dynamic references:] +% \pkg{varioref} issues a warning if the reference text spans a page break. +% \cs{fullref} or a plain \cs{ref} may be used instead. +% \item[Margin notes:] See the packages \pkg{marginfit}, \pkg{mparhack}, \pkg{marginfix}, +% and \pkg{marginnote} for possible improvements in margin note placement, which +% then may resolve the changing labels problem. +% \item[Footnotes:] See the packages \pkg{footnotehyper}, \pkg{footnote}, +% and \pkg{ftnright} for possible improvements in footnote placement, +% which again may resolve the changing labels problem. +% For \pkg{footmisc}, try avoiding the |perpage| option. +% \item[Active characters:] The sectioning commands +% (\cs{chapter}, \cs{section}, etc.) +% and the \cs{caption} command all have an optional ``short'' argument +% which, if provided, is used in the table of contents and list of figures/tables +% instead of the regular argument. +% \begin{quote} +% |\section[Simple heading name]{Complicated heading name}| \\ +% |\caption[Simple caption]{Complicated caption}| +% \end{quote} +% Providing a simplified caption or section heading may resolve the problem of +% incorrectly detecting changing labels. +% +% \item[\pkg{memoir} and \pkg{breqn}:] See \href +% {https://tex.stackexchange.com/questions/331209/warning-labels-may-have-changed-with-breqn} +% {https://tex.stackexchange.com/questions/331209/ \\ +% \hspace*{2em}warning-labels-may-have-changed-with-breqn} +% \end{description} +% +% +% \section{Multiply-defined labels} +% +% A bonus side-effect of the \pkg{labelschanged} packages is that +% multiply-defined labels are also listed at the end of the compilation. +% While warnings of multiply-defined labels also appear earlier in the log, +% listing them again at the end makes it easier to quickly identify those +% which are a problem. +% +% Avoid using |\label{}| or |\bibitem{}|. +% +% +% \section{Missing references} +% +% Unfortunately, locating missing references still requires searching the log to +% find which are a problem. +% +% +% \clearpage +% +% \section{References} +% +% This code is taken almost verbatim from David Carlisle's reply to a post on +% \textsc{TeX-LaTeX Stack Exchange}: +% \begin{quote} +% \ttfamily +% \href +% {https://tex.stackexchange.com/questions/154594/how-to-diagnose-a-permanent-labels-may-have-changed-warning} +% {https://tex.stackexchange.com/questions/154594/ \\ \hspace*{2em} how-to-diagnose-a-permanent-labels-may-have-changed-warning} +% \end{quote} +% +% David has given permission to have this reply converted to a \LaTeX\ package, +% and has placed his \textsc{Stack Exchange} posts the in public domain, per: +% \begin{quote} +% \url{https://tex.meta.stackexchange.com/a/3332/1090} +% \end{quote} +% +% For other discussion on this topic, see: +% \begin{quote} +% \ttfamily +% \href +% {https://tex.stackexchange.com/questions/109178/why-does-the-compiler-keeps-telling-me-forever-to-rerun-because-labels-have-ch} +% {https://tex.stackexchange.com/questions/109178/ \\ +% \hspace*{2em} why-does-the-compiler-keeps-telling-me-forever- \\ +% \hspace*{2em} to-rerun-because-labels-have-ch} +% \end{quote} +% +% +% \StopEventually{ +% \PrintChanges +% ^^A \PrintIndex +% } +% +% \clearpage +% +% \section{Code} +% +% At the end of the document, the |.aux| file is read back while \cs{newlabel} +% and \cs{bibcite} are effectively redefined as: +% \begin{quote} +% |\def\newlabel{\@testdef r}| \quad ---\,and\,--- \\ +% |\def\bibcite{\@testdef b}| +% \end{quote} +% +% While the |.aux| file is read, each label's new definition as given in the +% |.aux| file is compared to its existing definition as defined by |r@<label>| +% or |b@<label>|. +% +% \begin{macro}{\@testdef} \marg{r -or- b} \marg{label} \marg{new definition} +% \begin{macrocode} +\def\@testdef #1#2#3{% +% \end{macrocode} +% Remember the new definition for comparison purposes: +% \begin{macrocode} + \def\reserved@a{#3}% +% \end{macrocode} +% Compare with the old definition. No action if the same. +% \begin{macrocode} + \expandafter \ifx \csname #1@#2\endcsname \reserved@a \else% +% \end{macrocode} +% If different, print a warning: +% \begin{macrocode} + \typeout{^^JLabel `#2' has changed:^^J% +% \end{macrocode} +% Display the new meaning: +% \begin{macrocode} + \meaning\reserved@a^^J% +% \end{macrocode} +% Display the old meaning: +% \begin{macrocode} + \expandafter\meaning\csname #1@#2\endcsname^^J}% +% \end{macrocode} +% Remember that labels have changed: +% \begin{macrocode} + \@tempswatrue% + \fi% +} +% \end{macrocode} +% \end{macro} + +% +% \iffalse +%</package> +% \fi +% + +% +% ^^A At end: +% +% ^^A \clearpage +% ^^A \pagestyle{plain} +% \phantomsection +% \addcontentsline{toc}{section}{Change History and \indexname} +% +% \pagestyle{plain} +% +% \Finale +\endinput + + +To create the change log: +makeindex -s gglo.ist -o labelschanged.gls labelschanged.glo +makeindex -s gind.ist labelschanged.idx |