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/refcheck |
Initial commit
Diffstat (limited to 'macros/latex/contrib/refcheck')
-rw-r--r-- | macros/latex/contrib/refcheck/README | 8 | ||||
-rw-r--r-- | macros/latex/contrib/refcheck/refcheck.sty | 294 | ||||
-rw-r--r-- | macros/latex/contrib/refcheck/refdemo.pdf | bin | 0 -> 41597 bytes | |||
-rw-r--r-- | macros/latex/contrib/refcheck/refdemo.tex | 237 |
4 files changed, 539 insertions, 0 deletions
diff --git a/macros/latex/contrib/refcheck/README b/macros/latex/contrib/refcheck/README new file mode 100644 index 0000000000..94ad7f1cc6 --- /dev/null +++ b/macros/latex/contrib/refcheck/README @@ -0,0 +1,8 @@ +RefCheck.sty is intended to check references. It looks for +numbered but unlabelled equations, for labels, which are not +used in the text, for unused bibliography references. Besides, +it displays label and bibitem `keys' in text margins. + +RefDemo.tex is a short description of usage of RefCheck.sty. + +Oleg Motygin, mov222@gmail.com diff --git a/macros/latex/contrib/refcheck/refcheck.sty b/macros/latex/contrib/refcheck/refcheck.sty new file mode 100644 index 0000000000..c6f4fc2939 --- /dev/null +++ b/macros/latex/contrib/refcheck/refcheck.sty @@ -0,0 +1,294 @@ +% refcheck.sty +% checks lost and useless labels, shows `keys' of \label +% in the margins +% +% version 1.9.1 for LaTeX2e, 14 February 2013 +% (minor correction of ver. 1.9, issued on 31 March 2004) +% +% Copyright 1997--2004, 2013 by Oleg Motygin +% (mov222@gmail.com, mov@mail15.com) +% this program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License +% +% Usage is \usepackage{refcheck} with options showrefs, norefs, showcites, +% nocites, msgs, nomsgs, chkunlbld, ignoreunlbld +% +% Options showrefs and norefs, e.g. \usepackage[showrefs]{refcheck} +% sets on and off (`on' is default) writing label keys to output margins. +% '{?}' instead of a key means that the equation is not labelled. +% '?'s appear around a label name if the label is not used in references. +% +% Option showcites and nocites sets on and off (`on' is default) +% refcheck to show keys of bibitems in the margins. +% +% Options msgs (default) and nomsgs state whether refcheck writes +% its messages to .log file or not. +% The messages have the format +% Package refcheck Warning: Unused bibitem.. +% Package refcheck Warning: Unused label.. +% Package refcheck Warning: Unlabelled equation.. +% +% The check of unlabelled equations can be switched off by the option +% ignoreunlbld and on (default) by the option chkunlbld. +% +% refcheck generally works with AMS-LaTeX and HyperRef +% but amsmath and/or hyperref packages must be loaded before +% the refcheck package. +% +% refcheck can be used with the xr package. Suppose one invokes +% \usepackage{xr} \externaldocument[A:]{apps} in document foo1.tex and +% \usepackage{xr} \externaldocument[B:]{apps} in document foo2.tex. +% Then the commands \refcheckxrdoc[A:]{foo1} and \refcheckxrdoc[B:]{foo2} +% used in apps.tex allows to check usage of labels from apps.tex in the +% external files foo1.tex and foo2.tex. +% +% NOTE the problem with implicitly cited labels. +% For example, if there is a set of equations which are +% labelled by a1, a2,... an and referred in document by +% (\ref{a1})--(\ref{an}), then the labels a2, a3,...an-1 +% cannot be recognized as `used'. +% + +\def\filename{refcheck} +\def\fileversion{v1.9.1} +\def\filedate{2013/02/14} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{refcheck}[2013/02/14 v1.9.1] + +\let\mark@size=\footnotesize +\newif\if@labelled +\@labelledfalse +\newif\if@show@ref +\newif\if@show@cite +\newif\if@give@msgs +\newif\if@show@unl@bld + +\def\set@fbox@par{\fboxrule=0.01em\fboxsep=0.2em} +\def\unl@bld@mark{{\mark@size\textup{\{\textbf{?}\}}}} + +\DeclareOption{showrefs}{\@show@reftrue} +\DeclareOption{showcites}{\@show@citetrue} +\DeclareOption{msgs}{\@give@msgstrue} +\DeclareOption{chckunlbld}{\@show@unl@bldtrue} +\DeclareOption{norefs}{\@show@reffalse} +\DeclareOption{nocites}{\@show@citefalse} +\DeclareOption{nomsgs}{\@give@msgsfalse} +\DeclareOption{ignoreunlbld}{\@show@unl@bldfalse} +\ExecuteOptions{showrefs,showcites,msgs,chckunlbld} +\ProcessOptions\relax + +\def\showrefnames{\global\@show@reftrue} +\def\norefnames{\global\@show@reffalse} +\def\showcitenames{\global\@show@citetrue} +\def\nocitenames{\global\@show@citefalse} +\def\setonmsgs{\global\@give@msgstrue} +\def\setoffmsgs{\global\@give@msgsfalse} +\def\checkunlbld{\global\@show@unl@bldtrue} +\def\ignoreunlbld{\global\@show@unl@bldfalse} + +\def\@warning@rc@#1{\if@give@msgs\PackageWarning{refcheck}{#1}\else\relax\fi} + +\newif\if@unsdlbl + +\newtoks\btoks + +\AtBeginDocument{% +\typeout{Package: `refcheck' v1.9.1\space<2013/02/14>}% +\typeout{options: showrefs, showcites, msgs, chckunlbld}% +\immediate\write\@auxout{% + \string\providecommand\string{\string\usedref\string}[1]% + \string{\string\relax\string}}% +\let\@@ref@@=\ref +\let\@@pageref@@=\pageref +\let\@@bibitem@@=\bibitem +\let\@@@biblabel@@=\@biblabel +\let\@@label@@=\label +\renewcommand{\label}[1]{\@bsphack\global\@labelledtrue + \gdef\last@lbl{\@verbatim@{#1}}% + \@ifundefined{lab@#1}{\global\@unsdlbltrue + \@warning@rc@{Unused label `#1'}}% + {\global\@unsdlblfalse}% + \ifmmode\relax\else + {\setbox0=\vbox{\vss\@setnmmarginlbl}% + \wd0=0pt\ht0=0pt\dp0=0pt% + \ifvmode + \@tempdima=\prevdepth + \nointerlineskip\box0\nobreak + \prevdepth=\@tempdima + \else + \vadjust{\box0\nobreak}% + \fi}% + \fi + \@@label@@{#1}\@esphack}% +\expandafter\DeclareRobustCommand\expandafter + {\csname relax\string\ref\endcsname}[1]{\@@ref@@{#1}\wrtusdrf{#1}}% +\expandafter\let\expandafter\ref\csname relax\string\ref\endcsname +\expandafter\DeclareRobustCommand\expandafter + {\csname relax\string\pageref\endcsname}[1]{\@@pageref@@{#1}\wrtusdrf{#1}}% +\expandafter\let\expandafter\pageref\csname relax\string\pageref\endcsname +% +\def\@bibitem@proceed@#1{% +\@ifundefined{cit@#1}{\@warning@rc@{Unused bibitem `#1'}% + \if@show@cite + \gdef\@biblabel{\makebox[0pt][r]{\zero@height{{\mark@size{\bfseries\upshape?}}% + \underline{\@verbatim@{#1}}{\mark@size{\bfseries\upshape?}}$\,$}}% + \@@@biblabel@@}% + \fi + }{% + \if@show@cite + \set@fbox@par + \gdef\@biblabel{\makebox[0pt][r]{\zero@height{\fbox{\@verbatim@{#1}}$\,$}}\@@@biblabel@@}% + \fi + }}% +\def\bibitem{\@ifnextchar[\@lbibitem@rc@\@bibitem@rc@}% +\def\@lbibitem@rc@[#1]#2{% +\@bibitem@proceed@{#2}\@@bibitem@@[#1]{#2}}% +\def\@bibitem@rc@#1{% +\@bibitem@proceed@{#1}\@@bibitem@@{#1}}% +% +\@ifpackageloaded{amsmath}{% With AMS-LaTeX tags +\let\@@label@@in@@=\label@in@display +\def\label@in@display#1{\@bsphack\global\@labelledtrue + \gdef\last@lbl{\@verbatim@{#1}}% + \@ifundefined{lab@#1}{% + \global\@unsdlbltrue + \@warning@rc@{Unused label `#1'}}% + {\global\@unsdlblfalse}% + \@@label@@in@@{#1}\@esphack +}% +\let\@@eqref@@=\eqref +\let\@tagform@@@@=\tagform@ +\expandafter\DeclareRobustCommand\expandafter + {\csname relax\string\eqref\endcsname}[1]% + {{\let\tagform@=\@tagform@@@@\@@eqref@@{#1}}}% +\expandafter\let\expandafter\eqref\csname relax\string\eqref\endcsname +\def\tagform@#1{\@tagform@@@@{#1}% + \ifmeasuring@\relax\else\if@display + \if@labelled\relax\else\if@show@unl@bld + \@warning@rc@{Unlabelled equation (\theequation)}% + \fi\fi + \@setmarginlbl + \fi\fi +}% +}{\let\@@eqnnum@@=\@eqnnum +\def\@eqnnum{% + \if@labelled\relax\else\if@show@unl@bld + \@warning@rc@{Unlabelled equation (\theequation)}% + \fi\fi + \@@eqnnum@@ + \@setmarginlbl +}% +}}% + +\def\@setmarginlbl{% + \if@show@ref + \if@labelled + \set@fbox@par + \if@unsdlbl + \makebox[0pt][l]{\zero@height{$\,${\mark@size + {\bfseries\upshape?}\underline{\last@lbl}{\bfseries\upshape?}}}}% + \else + \makebox[0pt][l]{\zero@height{$\,$\fbox{{\mark@size\last@lbl}}}}% + \fi + \else + \if@show@unl@bld + \makebox[0pt][l]{\zero@height{$\,$\unl@bld@mark}}% + \fi\fi + \fi + \global\@labelledfalse +} + +\def\@setnmmarginlbl{% + \if@show@ref + \set@fbox@par + \if@unsdlbl + \hbox to \textwidth{\makebox[0pt][r]{{\mark@size{\bfseries + \upshape?}$\langle$\last@lbl$\rangle${\bfseries + \upshape?}}$\,$}\hfill}% + \else + \hbox to \textwidth{\makebox[0pt][r]{{\mark@size$\langle$% + \last@lbl$\rangle$}$\,$}\hfill}% + \fi + \fi + \global\@labelledfalse +} + +\def\zero@height#1{\setbox0=\hbox{#1}\dp0=0pt\ht0=0pt\copy0} + +\long\def\@verbatim@#1{\edef\next{#1}% + {\mark@size\ttfamily\upshape\frenchspacing\expandafter\@strip@\meaning\next}} +\def\@strip@#1>{} + +\def\usedref#1{\@ifundefined{lab@#1}{\global\@namedef{lab@#1}{}}{}} + +\let\@@citation@@=\citation + +\renewcommand{\citation}[1]{\@@citation@@{#1}% +\@for\@tempa:=#1\do{\@ifundefined{cit@\@tempa}% + {\global\@namedef{cit@\@tempa}{}}{}}% +} + +\DeclareRobustCommand{\wrtusdrf}[1]{% + \@ifundefined{la@#1}{\global\@namedef{la@#1}{}% + \used@write{#1}{\usedref}}{\null}} + +\def\used@write#1#2{% \protected@write, but \immediate + \@bsphack + \begingroup + \let\thepage\relax + \let\protect\@unexpandable@protect + \edef\reserved@a{\immediate\write\@auxout{\string#2{#1}}}% + \reserved@a + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi + \@esphack +} + +\def\refcheckxrdoc{\@ifnextchar[\rchXD@{\rchXD@[]}} +\def\rchXD@[#1]#2{{% + \makeatletter + \xdef\rchXD@prefix{#1}% + \rchXD@next#2.aux\relax\\}} +\def\rchXD@next#1\relax#2\\{% + \edef\rchXD@list{#2}% + \rchXD@loop{#1}} +\def\rchXD@aux{% + \ifx\rchXD@list\@empty\else\expandafter\rchXD@explist\fi} + +\def\rchXD@explist{\expandafter\rchXD@next\rchXD@list\\} +\def\rchXD@loop#1{\openin\@inputcheck#1\relax + \ifeof\@inputcheck + \PackageWarning{refcheck}{^^JNo file #1^^JLABELS USAGE NOT IMPORTED.^^J}% + \expandafter\rchXD@aux + \else + \PackageInfo{refcheck}{IMPORTING LABELS USAGE FROM #1}% + \expandafter\rchXD@read + \fi +} +\def\rchXD@read{% + \read\@inputcheck to\rchXD@line + \expandafter\rchXD@test\rchXD@line..\rchXD@} +\def\cleanprefix#1#2{% + \if#1\@empty \usedref{#2}\else + \def\@test##1#1##2\@nil{\edef\@tempa{##1}\edef\@tempb{##2}}% + \@test#2#1\@nil + \ifx\@tempb\@empty \relax\else \ifx\@tempa\@empty + \def\@tempb#1##1\@nil{\edef\@tempa{##1}}\@tempb#2\@nil + \ifx\@tempa\@empty \relax\else\usedref{\@tempa}\fi + \fi\fi + \fi +} +\long\def\rchXD@test#1#2#3\rchXD@{% + \ifx#1\usedref + \edef\exp@nddef{\noexpand\cleanprefix{\rchXD@prefix}{#2}}% + \exp@nddef + \else\ifx#1\@input + \edef\rchXD@list{\rchXD@list#2\relax}% + \fi\fi + \ifeof\@inputcheck\expandafter\rchXD@aux + \else\expandafter\rchXD@read\fi +} + +\endinput +%% +%% End of file `refcheck.sty'. diff --git a/macros/latex/contrib/refcheck/refdemo.pdf b/macros/latex/contrib/refcheck/refdemo.pdf Binary files differnew file mode 100644 index 0000000000..2640d8692a --- /dev/null +++ b/macros/latex/contrib/refcheck/refdemo.pdf diff --git a/macros/latex/contrib/refcheck/refdemo.tex b/macros/latex/contrib/refcheck/refdemo.tex new file mode 100644 index 0000000000..a40d2c9c5a --- /dev/null +++ b/macros/latex/contrib/refcheck/refdemo.tex @@ -0,0 +1,237 @@ +\documentclass[11pt]{article} +\usepackage{refcheck} +\textwidth=360pt +\begin{document} +\baselineskip=4.5mm +\textheight=40\baselineskip +\pagestyle{myheadings} + +\parindent=1em\parskip=0.75ex +\makeatletter + +\thispagestyle{empty} + +\enlargethispage{-8mm} + +\def\RefCheck{\textsl{Refcheck\/}} +\def\AmS{\mbox{$\mathcal{A}$\kern-0.17em\raise-2.1pt\hbox{$\mathcal{M}$}% +\kern-0.115em$\mathcal{S}$}} +\renewcommand{\refname}{{\normalsize References}} +\def\curversion{1.9.1} +\def\curvertime{2013/02/14} + +\section*{\RefCheck{\tiny${}^{\mathrm{\ \ ver. +\curversion}}_{\mathrm{\curvertime}}$} for \LaTeXe} +\markboth{\hfill\bfseries\RefCheck\ for \LaTeXe\hfill}% +{\hfill\bfseries\RefCheck\ for \LaTeXe\hfill} +This short demo file describes usage of \RefCheck\ package +with \LaTeXe. The package looks for useless labels, +unlabelled equations, unused bibliography references +and puts `keys' of labels on margins. + +To start checking, one should just write +\begin{verbatim} + \documentclass{article} + \usepackage{refcheck} +\end{verbatim} +at the beginning of document and compile the file twice. +Then, comments on references could be found in \texttt{.log} file and +in the margins. + +Consider the set of equations +\begin{eqnarray} +&&a=b\label{eq.1}\\ +&&b=c\label{eq.2}\\ +&&c=d, +\end{eqnarray} +written as +\begin{verbatim} + \begin{eqnarray} + &&a=b\label{eq.1}\\ + &&b=c\label{eq.2}\\ + &&c=d, + \end{eqnarray} +\end{verbatim} +Then the \texttt{.log} file will contains the following messages: +{\small +\begin{verbatim} + Package refcheck Warning: Unused label `eq.2' on input line 44. + Package refcheck Warning: Unlabelled equation (3) on input line 46. +\end{verbatim} +} +\noindent +because the equation (\ref{eq.1}) is +referenced here by \verb#(\ref{eq.1})#, the label {\tt eq.2} of the second +equation is not used and the last equation is numbered but it is not +labelled. + +Keys of labels are written in the marginal notes when the option +\textit{showrefs\/} (default) or the command \verb#\showrefnames# are +invoked. This regime can be set off by the option \textit{norefs} or (at +any point of text) by the command \verb#\norefnames#. + +These marks include some information on labels. Namely, useless +labels are underlined and bounded by `\texttt{?}', the mark `\unl@bld@mark' +means that the equation is unlabelled. Marks are framed for +the labels which are used in text. + +\newpage + +The package is working in the same way with bibliography. +Consider the following short list of books: + +\vspace{-1\baselineskip} + +\begin{thebibliography}{9} + \bibitem{book1}A book. + \bibitem{book2}Another book. + \bibitem{book3}Third book. +\end{thebibliography} +defined as follows +\begin{verbatim} + \begin{thebibliography}{9} + \bibitem{book1}A book. + \bibitem{book2}Another book. + \bibitem{book3}Third book. + \end{thebibliography} +\end{verbatim} +Further, we use the labels of \cite{book1,book2} with the +command \verb#\cite{book1,book2}# and do not use the label +`book3'. Then, the \texttt{.log} file will contain the following message +{\small +\begin{verbatim} + Package refcheck Warning: Unused bibitem `book3' on input line 88. +\end{verbatim}} + +Commands \verb#\showcitenames# and \verb#\nocitenames# for +bibliography are analogous to the commands \verb#\showrefnames# and +\verb#\norefnames#. They set on and off \RefCheck\ to write keys of +bibitems to output. The same function is for the options +\textit{showcites\/} (default) and \textit{nocites}. + +Options \textit{msgs\/} (default) and \textit{nomsgs\/} state whether +\RefCheck\ writes its messages to \texttt{.log} file or not. + +The check of unlabelled equations can be switched off by the option +\mbox{\textit{ignoreunlbld\/}} and on (default) by the option +\textit{chkunlbld\/}. + +\medskip + +\RefCheck\ generally works with \AmS-\LaTeX\ and \textbf{hyperref}, +but the packages must be loaded \underline{before} the \RefCheck\ package. + +\medskip + +\RefCheck\ can be used with the \textbf{xr} package. Suppose one invokes\\ +\verb#\usepackage{xr}# \verb#\externaldocument[A:]{apps}#\\ in document foo1.tex and\\ +\verb#\usepackage{xr}# \verb#\externaldocument[B:]{apps}#\\ in document foo2.tex. +Then the commands \verb#\refcheckxrdoc[A:]{foo1}# and \verb#\refcheckxrdoc[B:]{foo2}# +used in apps.tex allows to check usage of labels from apps.tex in the +external files foo1.tex and foo2.tex. + +\medskip + +Note the problem with implicitly cited labels. For +example, if there is a set of equations which are labelled with +$\,$\texttt{a1,a2,...an}$\,$ and referred in document by +\verb#(\ref{a1})--(\ref{an})#, then the labels +$\,$\texttt{a2,a3,...an-1}$\,$ cannot be recognized as `used'. + +\medskip +\bigskip + +\textbf{Summary of options and commands:} +\medskip + +\noindent +\verb#\refcheckxrdoc[prefix]{foo}# to check usage of labels +of the current document in the file foo.tex where they are used +via \verb#\usepackage{xr}# and +\verb#\externaldocument[prefix]{thisdocument}# + +\medskip + +\begin{raggedright} +\begin{tabular}{|l|l|c|l|} +\hline +Option & Command & Switch & Function\\ +\hline +showrefs$^{*}$ & \verb#\showrefnames# & on & to put keys of labels\\ +\cline{1-3} +norefs & \verb#\norefnames# & off & in the marginal notes\\ +\hline +showcites$^{*}$ & \verb#\showcitenames# & on & to put bibitem keys\\ +\cline{1-3} +nocites & \verb#\nocitenames# & off & in the marginal notes\\ +\hline +msgs$^{*}$ & \verb#\setonmsgs# & on & to write \RefCheck's\\ +\cline{1-3} +nomsgs & \verb#\setoffmsgs# & off & messages to \texttt{.log}\\ +\hline +chkunlbld$^{*}$ & \verb#\checkunlbld# & on & to check unlabelled\\ +\cline{1-3} +ignoreunlbld & \verb#\ignoreunlbld# & off & equations\\ +\hline +\end{tabular} +\end{raggedright} +\par\noindent +\mbox{\qquad}$*$ default + +\bigskip + +\def\item{\noindent\mbox{\kern0.5em$\bullet$\kern0.5em}} + +\textbf{Versions of \RefCheck, acknowledgments and bugs:} + +\item +Versions \textbf{1.0--1.3} worked with \LaTeX2.09. Many +thanks to Antonio Loria for his useful comments on those versions. +Version \textbf{1.2} of \RefCheck\ can be found in +\texttt{/tex-archive/obsolete/macros/latex209/contrib/} in CTAN. + +\item +\textbf{1.4} was the first version of \RefCheck\ for \LaTeXe, it had a +few bugs in its functionality for \AmS-\LaTeXe's \verb#\eqref#, +\verb#\tag#, \verb#split# and \verb#multline#. Many thanks to +Cornelius C. Noack and Mikhail Zotov for finding the problem. + +\item +In the version~\textbf{1.5} the bugs were removed, but it was found +(thanks to Mikhail Zotov) that the version marks \AmS-\LaTeXe's +\verb#equation*# and \verb#gather*# as unlabelled. The versions +\textbf{1.6} solved the problem. + +\item The version \textbf{1.7} (optimized code of \textbf{1.6}) was +found by Adriano Pascoletti to work incorrectly in \verb#\caption# (more +generally, when \verb#\ref#, \verb#\pageref# occur in a material +processed to \verb#\write#, in particular, to be put into \texttt{.toc}, +\texttt{.lot}, \texttt{.lof} files). + +\item The version \textbf{1.8} was intended to solve the +problem. Besides, some more work was done to provide compability with +\AmS-\LaTeX\ and \textbf{hyperref}. + +\item The version \textbf{1.9} added possibility to check usage of labels in external +files. More compability with \textbf{cite} package was achieved. + +\item The current minor version \textbf{\curversion} is intended to fix the bug discussed +at \\ +{\small\texttt{http://tex.stackexchange.com/questions/88046/problem-with-refcheck}}.\\ +Besides, the format of refcheck warnings is changed. + +\bigskip + +\textbf{New options and commands:} + +\item +Version \textbf{1.5}: \textit{msgs\/} and \textit{nomsgs\/}. + +\item +Version \textbf{1.6}: \textit{ignoreunlbld\/} and +\textit{chkunlbld\/} (suggested by Miroslav Fikar). + +\item +Version \textbf{1.9}: \verb#\refcheckxrdoc#. + +\end{document} |