diff options
Diffstat (limited to 'Build/source/utils/chktex')
-rw-r--r-- | Build/source/utils/chktex/ChkTeX.pdf | bin | 0 -> 200901 bytes | |||
-rw-r--r-- | Build/source/utils/chktex/ChkTeX.tex | 1810 | ||||
-rw-r--r-- | Build/source/utils/chktex/Makefile.am | 28 | ||||
-rw-r--r-- | Build/source/utils/chktex/Makefile.in | 84 | ||||
-rwxr-xr-x | Build/source/utils/chktex/configure | 52 | ||||
-rw-r--r-- | Build/source/utils/chktex/configure.ac | 7 |
6 files changed, 1944 insertions, 37 deletions
diff --git a/Build/source/utils/chktex/ChkTeX.pdf b/Build/source/utils/chktex/ChkTeX.pdf Binary files differnew file mode 100644 index 00000000000..a9cfb22f813 --- /dev/null +++ b/Build/source/utils/chktex/ChkTeX.pdf diff --git a/Build/source/utils/chktex/ChkTeX.tex b/Build/source/utils/chktex/ChkTeX.tex new file mode 100644 index 00000000000..1c78de64473 --- /dev/null +++ b/Build/source/utils/chktex/ChkTeX.tex @@ -0,0 +1,1810 @@ +%% +%% ChkTeX v1.6.4, LaTeX documentation for ChkTeX program. +%% Copyright (C) 1995-96 Jens T. Berger Thielemann +%% +%% This program is free software; you can redistribute it and/or modify +%% it under the terms of the GNU General Public License as published by +%% the Free Software Foundation; either version 2 of the License, or +%% (at your option) any later version. +%% +%% This program is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%% GNU General Public License for more details. +%% +%% You should have received a copy of the GNU General Public License +%% along with this program; if not, write to the Free Software +%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%% +%% Contact the author at: +%% Jens Berger +%% Spektrumvn. 4 +%% N-0666 Oslo +%% Norway +%% E-mail: <jensthi@ifi.uio.no> +%% +%% NOTE: This file is written in LaTeX, and should be compiled +%% before viewing. If you don't know how to do this, consult +%% your local TeX guru. If you don't possess LaTeX, you are +%% assumed to not need this program; so there's no text version +%% of this file... +%% +%% You may still be able to view the DVI or PostScript versions of +%% this file, though, they are included in the archive. +%% + + + +\documentstyle[a4, array, tabularx, verbatim, multicol]{article} +%latex +\nonfrenchspacing +\newcounter{errornum} +\setcounter{errornum}{1} +%endlatex +\newcommand{\jtbt}{Jens~T. Berger~Thielemann} +\newcommand{\Cmd}[1]{``{\tt{}#1}''} +\newcommand{\rsrc}{``{\tt{}chktexrc}''} +\newcommand{\chktex}{Chk\TeX} + +%latex +\newcolumntype{Y}{>{\raggedright\arraybackslash}X} +\newcommand{\fmted}[1]{% + {\noindent\large% + \begin{tabularx}{\linewidth}{lY}% + \bf Warning \theerrornum: & \tt #1% + \end{tabularx}}\stepcounter{errornum}\nopagebreak[4]} + +\newenvironment{errdesc}[1]{\noindent\fmted{#1}\begin{quote}}{\end{quote}% +\pagebreak[3]} + +\newenvironment{html}{\comment}{\endcomment} +\newenvironment{rawhtml}{\comment}{\endcomment} + +\makeatletter +\@namedef{errdesc*}#1{\begin{errdesc}{\textit{#1\/}}} +\@namedef{enderrdesc*}{\end{errdesc}} +\@ifundefined{textit}{\gdef\textit#1{{\it #1\/}}}\relax +\@ifundefined{LaTeXe}{\gdef\LaTeXe{\LaTeX2${}_{\textstyle\varepsilon}$}}\relax +\makeatother + + +\newenvironment{errexam} +{ +\vskip 0pt plus 5pt +\begin{center} +} +{\end{center}} +\columnseprule 0.1pt + +%!\newcommand{\BS}{\verb@\@} +%!\newcommand{\chktex}{ChkTeX} +%!\newcommand{\slash}{/} +%endlatex + + +\title{\chktex\ v1.6.4} +\author{Jens~T. Berger~Thielemann} +\date{\today} + + +\begin{document} +\maketitle + +%latex +\newcommand{\BS}{\char`\\} +%endlatex +\section{Introduction} + +This program has been written in frustration because some constructs in +\LaTeX\ are sometimes non-intuitive, and easy to forget. It is {\em + not\/} a replacement for the built-in checker in \LaTeX\@; however it +catches some typographic errors \LaTeX\ oversees. In other words, it +is Lint for \LaTeX. Filters are also provided for checking the +\LaTeX\ parts of CWEB documents. + +It is written in ANSI C and compiles silently under GCC using +\Cmd{-Wall -ansi -pedantic} and almost all warning flags. This means +that you can compile \& use the program on your favorite machine. +Full source included. + +The program also supports output formats suitable for further +processing by editors or other programs, making errors easy to cycle through. +Software is provided for beautifully interfacing against the +AUC-\TeX\ Emacs mode, CygnusED, GoldEd and various Amiga message browsers. + +The program itself does not have any machine requirements; However compiling +for other platforms has not been done for a long time now so the code has been +removed. If interest rises it can be resurrected. + + +\section{Features} +\chktex\ begins to get quite a few bells \& whistles now. However, you +should be aware of that in most cases, all this is transparent to the user. +As you will see, \chktex\ offers the ability to adapt to many environments +and configurations. + +\subsection{New features} + +Modifications and additions since v1.6: +\begin{itemize} + \item Improved the build system + \item Better fixes for memory access errors +\end{itemize} + +Modifications and additions since v1.5: +\begin{itemize} + \item Fixed a crash when running from emacs + \item Fixed a crash when checking our own manual + \item Added \tt{\BS{}verb*} support +\end{itemize} + +Modifications and additions since v1.4: + +\subsubsection{Program} + +Modifications to the executable itself: +\begin{itemize} +\item As usual, a few more warnings: + \begin{itemize} + \item No space or similar in front/after parenthesis. + \item Demands a consistent quote style. + \item Double spaces in input which will not be rendered as one. + \item Punctuation malplaced regarding to math mode. + \item Warns about \TeX\ primitives. + \item Space in front of footnotes. + \item Bogus {\tt\BS{}left} and {\tt\BS{}right} commands. + \end{itemize} + +\item The abbreviation recognizer has (for the last time?) been + redesigned. We now produce far less false warnings, catch more + cases and do all this faster than before. Seems like a win. + + Done much of the same with the italic correction detection part, + too\ldots +\item Some bugs have been silently fixed. Hot spots in the program + have been optimized; in certain cases this in fact doubles the + speed! + + Along with this goes more code elegance and utilization of macro + processing and the C language. Take a look at \Cmd{Resource.[ch]}. + +\item It's possible to specify separate output-formats depending on + whether you are sending the output to a file/pipe or to a + terminal. + +\item Column positions are finally correct; we now expand tabs + correctly. +\item \chktex\ will now recursively search for {\tt\BS{}input}'ed + files, both in the document and on the commandline. See the + \rsrc\ file for more info. +\item The debug switch is now more intelligent; if you wish to hack + a bit on \chktex\ for yourself, it is possible to produce + selective debugging output. The feature can also be disabled + altogether. +\item MS-DOS and OS/2 version of the program is now more flexible + and well-behaved, thanks to Gerd B\"ohm. +\item You may now say \Cmd{-wall} to make all messages warnings, and + turn them on. +\item Uses termcap on UNIX boxes; this should ensure that \Cmd{-v2} + (or more precisely: \Cmd{\%i} and \Cmd{\%I}) works regardless to + what terminal you are using. +\end{itemize} + +\subsubsection{Resource file} + +New concepts introduced in the setup file: +\begin{itemize} +\item You may now specify both case-sensitive and case-insensitive + user patterns in the \rsrc\ file. In addition; it is now possible + to reset/clear lists. +\item It is possible to specify how many arguments + (optional/required) \Cmd{WIPEARG} should wipe; it behaves also + somewhat more intelligent when the arguments stretch over multiple + lines. +\item Global files will be read {\em in addition\/} to local ones. The + searching order has also been reversed in order to make this more + intelligent. +\end{itemize} + + +\subsubsection{Other} +Various other stuff I've done to the product: + +\begin{itemize} +\item The documentation has been polished and should now be easier + to use in practical situations. +\item \Cmd{check} target in \Cmd{Makefile}, so you can check that + the installation succeeded. In fact, the \Cmd{Makefile} has been + enhanced in several other ways too, amongst other it is now GNU + conforming. +\item \Cmd{deweb} is now documented; you may say \Cmd{man~deweb} to + get a few words of advice. The support script ({\tt chkweb}) does + now behave as the remaining package (accepting stdin input and flags). +\item I've written an Emacs hack which magically adds \chktex\ to the + list of AUC-\TeX\ commands; thus making the use of the program even + more trivial. + + For those of you who don't wish to mess with Emacs, I've included a trivial +%latex + $\mbox{lacheck}\leftrightarrow\mbox{\chktex}$ +%!lacheck <-> \chktex\ % +%endlatex + interface. + + This means that you now can use \chktex\ just as easily as lacheck + when you're running AUC-\TeX. + +\item Added an ARexx script which lets \chktex\ talk to VBrowse, the + message browser of Volker Barthelmann's freely distributable ANSI + C compiler. The browser itself is available on Aminet as + \Cmd{dev/c/vbcc.lha}. +\end{itemize} + +\subsection{Feature list} + +\begin{itemize} +\item Supports over 40 warnings. Warnings include: +%latex + \begin{multicols}{2} + \begin{flushleft} +%endlatex + \begin{itemize} + \item Commands terminated with space. Ignores \Cmd{\BS{}tt}, etc. + \item Space in front of references instead of \Cmd{\~{}}. + \item Forgetting to group parenthesis characters when + sub-\slash{}super\-scripting. + \item Italic correction (\Cmd{\BS/}) mistakes (double, + missing, unnecessary). + \item Parenthesis and environment matching. + \item Ellipsis detection; also checks whether to use + \Cmd{\BS{}dots}, \Cmd{\BS{}cdots} or \Cmd{\BS{}ldots}. + \item Enforcement of normal space after abbreviation. Detects + most abbreviations automagically. + \item Enforcement of end-of-sentence space when the last + sentence ended with capital letter. + \item Math-mode on/off detection. + \item Quote checking, both wrong types (\Cmd{"}) and wrong + direction. + \item Recommends splitting three quotes in a row. + \item Searching for user patterns. + \item Displays comments. + \item Space in front of \Cmd{\BS{}label} and similar commands. + \item Use of \Cmd{x} instead of \Cmd{\$\BS{}times\$} between numbers. + \item Multiple spaces in input which will be rendered as one + space (or multiple spaces, where that is undesirable). + \item Warns about text which may be ignored. + \item Mathematical operators typeset as variables. + \item No space in front of/after parenthesis. + \item Demands a consistent quote style. + \item Punctuation inside inner math mode/outside display math + mode. + \item Use of \TeX\ primitives where \LaTeX\ equivalents are + available. + \item Space in front of footnotes. + \item Bogus characters following commands. + \end{itemize} +%latex + \end{flushleft} + \end{multicols} +%endlatex +\item Fully customizable. Intelligent resource format makes it + possible to make \chktex\ respect your \LaTeX\ setup. Even + command-line options may be specified globally in the \rsrc\ file. +\item Supports \Cmd{\BS{}input} command; both \TeX\ and \LaTeX\ version. + Actually includes the files. \Cmd{TEXINPUTS}-equivalent search path. +\item Intelligent warning/error handling. The user may promote/mute + warnings to suit his preferences. You may also mute warnings in the + header of a file; thus killing much unwanted garbage. +\item Scripts included for checking CWEB files written in \LaTeX. + (Requires perl v5). +\item Supports both \LaTeX\ 2.09 and \LaTeXe{}. +\item Flexible output handling. Has some predefined formats and lets + the user specify his own format. Uses a \Cmd{printf()} similar + syntax. \Cmd{lacheck} compatible mode included for interfacing with + the AUC-\TeX\ Emacs mode. +\item Written in ANSI C\@. \Cmd{configure} script included for easy + setup and installation on UNIX systems. +\end{itemize} + +Still, it is important to realize that the output from \chktex\ is +only intended as a {\em guide\/} to fixing faults. However, it is by +no means always correct. This means that correct \LaTeX\ code may +produce errors in \chktex, and vice versa: Incorrect \LaTeX\ code may pass +silently through. + + + +\section{Legal stuff} + +\chktex{}, documentation, installations scripts, CWEB filters and other +materials provided are copyright \copyright\ 1995--96 Jens~T. +Berger~Thielemann, unless explicitly stated otherwise. + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY\@; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE\@. See the GNU General Public License for +more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to: +\begin{quote} + The Free Software Foundation, Inc. \\ + 675 Mass Ave \\ + Cambridge \\ + MA 02139 \\ + USA +\end{quote} + + + + +\begin{html} +\section{Availability} + +This program will be uploaded to CTAN\@; thus it can be +found at any mirrors of those. +\end{html} + +\section{Installation} + +A few words on installation on various platforms: + +\begin{description} +\item[UNIX:] Type \Cmd{configure}, \Cmd{make} and finally + \Cmd{make~install}. To make sure everything proceeded correctly, + type \Cmd{make~check}. If you don't have superuser privileges and thus + access to the default system areas, you should type + \Cmd{configure~--help} to help you set up correct paths. + + If you haven't installed any software like this before, that is + distributed in source form, here are some guidelines to help you + install it locally at your account. Please note that a mail to the + system administrator may be less work for you. + + We assume that you have put the archive (\Cmd{chktex.tar.gz}) in a + subdir of yours, with path \Cmd{\~{}/tmp}. We further assume that + your shell is \Cmd{csh} or \Cmd{tcsh}. Do the following: + + \begin{enumerate} + \item First of all, unpack the archive contents. + +\begin{verbatim} +> cd ~/tmp +> gunzip chktex.tar.gz +> tar xf chktex.tar +\end{verbatim} + + \item Now, we can configure the program. There are some + configuration options you should know about: + \begin{description} + \item[\Cmd{--enable-emacs-hack}:] Install a small file which + adds \chktex\ to the command menu of AUC-\TeX. This is to be + considered as a hack, and may break in future versions of + AUC-\TeX. It works fine under AUC-\TeX\ v2.9, though. + + This option needs the path of your elisp directory as argument, + e.g. \Cmd{--enable-emacs-hack=/home/myself/elisp} or similar. + + You'll also have to add the following line to your \Cmd{.emacs} + file: +\begin{verbatim} +(require 'chktex) +\end{verbatim} + You can now access \chktex\ from the \Cmd{Command} menu in + AUC-\TeX. To cycle through the messages, type \verb#C-x `#. + + \item[\Cmd{--enable-lacheck-replace}] This enables a quick + hack for making the AUC-\TeX\ Emacs mode use \chktex\ instead of + lacheck. This is done by installing a stub script which + ``overrides'' the original lacheck executable. + + While more stable than the previous solution, this is also + significantly less elegant --- in computing terms, this is the + ``brute force'' approach. + + \item[\Cmd{--enable-debug-info}] \chktex\ has an ability to spit + out various diagnostic messages using the \Cmd{-d} flag. This + behaviour is on by default. By adding the flag + \Cmd{--disable-debug-info} to the commandline, this will not be + compiled in. + + This may be useful if you're running short of disk space (the + time savings are neglible). + \end{description} + + If you are installing the program on your local account, use the + following command: + +\begin{verbatim} +> configure --prefix ~/ +\end{verbatim} + + Add eventual extra flags as specified above. This command will + generate a significant amount of output, this can usually be ignored. + + \item Finally, we can just build the program and install it. + +\begin{verbatim} +> make +> make install +\end{verbatim} + + \item Finished! The program is now installed and ready to use. You + may now tell other people to put your bindir in their path in + order to benefit from your work. All that remains is to make the + shell aware of your installation. + +\begin{verbatim} +> rehash +\end{verbatim} + + To make the remaining parts of your system aware of this, you'll + have to log out and re-log in, I'm afraid. However, you should delay this + until you've completed this installation procedure. + + \item If you wish to make sure that everything is OK (you ought to), + you may now ask \chktex\ to do a self-test: + +\begin{verbatim} +> make check +\end{verbatim} + + \end{enumerate} + +\item[Other platforms:] First of all, you have to copy the + \Cmd{config.h.in} file to a file named \Cmd{config.h}. Then, edit + it to reflect your system. Do the same with \Cmd{OpSys.h} (this + file has been reduced significantly). If you wish, you may define + \Cmd{DATADIR} to the path you want the global resource file to be + put. + + Now, I would suggest that you take a peak at the \Cmd{OpSys.c} + file, and edit it appropiately, for more + comfort. This should not be necessary, though, at least not the + first time. + + Finally, you may now compile and link all \verb@.c@ files. Define + \Cmd{HAVE\_CONFIG\_H} to 1 (on the command-line, for instance). If + the \Cmd{config.h} you wish to use has another name, define + \Cmd{CONFIG\_H\_NAME} to that (in that case, don't define + \Cmd{HAVE\_CONFIG\_H}). + + Put the directory path of the \rsrc\ file in a environment variable + named \Cmd{CHKTEXRC}. The files \Cmd{deweb.in} and \Cmd{chkweb} + should be moved to a directory in your path. These files may need + further setup, as they haven't got the location of perl + initialized. + + If your compiler/the compiled program complains (or crashes!), you + may try the hints listed below. Please note that it only makes + sense to try these hints if your compiler fails to produce a working + program. + + \begin{enumerate} + \item Increase the preprocessor buffers and line buffers. The + \chktex{} sources define macros sized 3--4k (expanding to about + the same), and passes arguments sized about 1k. + \item Use the magic switch which lets us use large + \Cmd{switch(\dots)\{\dots\}} statements; some of these statements + have about 120 \Cmd{case} entries. + \item The sources require that at least the first 12 of each + identifier is significant. + \end{enumerate} +\end{description} +{\bf Note:\/} You {\em must\/} install the new \rsrc\ file; \chktex\ will +fail to function unless! + + After doing this, you may enhance \chktex' behaviour by +reading/editing the \rsrc\ file. + +%latex +\section{Usage} + +\subsubsection{Synopsis} + +A UNIX-compliant template format follows: + +\newcommand{\Group}[1]{\mbox{[#1]}} +\begin{tabularx}\textwidth{lY} + \tt chktex & \tt \Group{-hiqrW} \Group{-v[0-\dots]} \Group{-l + <rcfile>} \Group{-[wemn] <[1-42]|all>} \Group{-d[0-\ldots]} \Group{-p + <pseudoname>} \Group{-o <outputfile>} \Group{-[btxgI][0|1]} + file1 file2 \dots +\end{tabularx} + + +\subsubsection{Options} + +These are the options \chktex\ currently accepts. +Please note that single-lettered options requiring a numerical or no +argument may be concatenated. E.g.\ saying \Cmd{-v0qb0w2} is the +same as saying \Cmd{-v0~-q~-b0~-w2}, except for being less to +type. + +Enough general talk; here's a rather detailed description of all +options: +\begin{description} +\item[Misc.\ options:] General options which aren't related to some + specific subpart of \chktex. + \begin{description} + \item[{\tt -h [--help]}] Gives you a command summary. + \item[{\tt -i [--license]}] Shows distribution information. + \item[{\tt -l [--localrc]}] Reads a resource-file formatted + as the global resource-file \rsrc, in addition to the global + resource-file. This option needs the name of the resource-file + as a parameter. See also {\tt -g}. + \item[{\tt -r [--reset]}] This will reset all settings to their + defaults. This may be useful if you use the {\tt CMDLINE} + directive in your \rsrc\ file, and wish to do something + unusual. + \item[{\tt -d [--debug]}] Needs a numeric argument; a bitmask + telling what to output. The values below may be added in order + to output multiple debugging info. + + \begin{tabularx}\linewidth{cX} + \bf Value & \bf Dumps\ldots\\ + 1 & All warnings available and their current status. \\ + 2 & Statistics for all lists in the resource file. \\ + 4 & The contents of all lists in the resource file. \\ + 8 & Misc.\ other status information. \\ + 16 & Run-time info (note that this isn't widely used). \\ + \end{tabularx} + The info is produced after all switches and resource files have + been processed. + + It is possible to install versions of \chktex\ that ignore this + flag; this means that it is not certain that this flag works. + \item[{\tt -W [--version]}] Displays version information, and exits. + \end{description} +\item[Muting warning messages:] Controls whether and in what form + error messages will appear. Usually they accept a specific warning + number (e.g.\ \Cmd{-w2}), but you may also say \Cmd{all} (e.g.\ + \Cmd{-wall}) which does the operation on {\em all\/} warnings. + \begin{description} + \item[{\tt -w [--warnon]}] Makes the message number passed as + parameter a warning and turns it on. + \item[{\tt -e [--erroron]}] Makes the message number passed as + parameter an error and turns it on. + \item[{\tt -m [--msgon]}] Makes the message number passed as + parameter a message and turns it on. Messages are not counted. + \item[{\tt -n [--nowarn]}] Turns the warning/error number passed + as a parameter off. + \end{description} +\item[Output control flags:] Determines the appearance and + destination of the error reports. + \begin{description} + \item[{\tt -q [--quiet]}] Shuts up about copyright information. + \item[{\tt -o [--output]}] Normally, all errors are piped to {\tt stdout}. + Using this option with a parameter, errors will be sent to the + named file instead. Only information relative to the \LaTeX\ file + will be sent to that file. Memory problems and similar will as as + always be sent to {\tt stderr}. If a file with the name given + already exists, it will be renamed to \Cmd{foobar.bak} + (\Cmd{foobar.\$cl} under MS-DOS), \Cmd{foobar} being the name of + the file. See also \Cmd{-b}. + + \item[{\tt -v [--verbosity]}] Specifies how much and how you + wish the error reports to be displayed. This is specified in the + \rsrc\ file; we'll list the default values below. If you wish, + you may thus edit the \rsrc\ file to add or modify new formats. + + The default is mode 1 (that is, the {\em second\/} entry in the + \rsrc\ file), using {\tt -v} without any parameter will give you + mode 2. + + \begin{description} + \item[0] Will show the information in a way that should be + suitable for further parsing by {\tt awk}, {\tt sed} or + similar. The format is as follows: +\begin{verbatim} +File:Line:Column:Warning number:Warning message +\end{verbatim} + The colons may be replaced with another string; use the + \verb@-s@ switch for this. + + As the program does not output all errors in quite order, this + output format is also suitable for piping through \Cmd{sort}. + \item[1] Shows the information in a way which is more + comprehensible for humans, but which still doesn't need + anything but a glass tty. + \item[2] Shows the information in a fancy way, using escape + codes and stuff. It is the indeed most readable of all + modes; however, it needs proper set up of the \Cmd{ChkTeX.h} + at compilation time. UNIX boxes, however, will find the + information automatically. + \item[3] Shows the information suitable for parsing by Emacs; + this is the same format as {\tt lacheck} uses. More formally, + it is the following: +\begin{verbatim} +"File", line Line: Warning message +\end{verbatim} + + To utilize this, type \verb@M-x compile RET@. Delete whatever + is written in the minibuffer, and type + \verb@chktex -v3 texfile.tex@, and you should be able to + browse through the + error messages. Use \verb@C-x `@ to parse the messages. + \item[4] More or less the same as \verb@-v3@, but also includes + information on where the error actually was found. Takes somewhat + longer time to parse, but much more informative in use. + \end{description} + + \item[{\tt -f [--format]}] Specifies the format of the output. + This is done using a format similar to \Cmd{printf()}, where we + support the specifiers listed below. + + \smallskip + \newcommand{\Pf}[1]{\tt \%#1 &} + \begin{tabularx}{\linewidth}{cX} + \bf Code & \bf Description \\ + \Pf{b} String to print {\bf b\/}etween fields (from {\tt + -s} option). \\ + \Pf{c} {\bf C\/}olumn position of error. \\ + \Pf{d} Length of error ({\bf d\/}igit). \\ + \Pf{f} Current {\bf f\/}ilename.\\ + \Pf{i} Turn on {\bf i\/}nverse printing mode.\\ + \Pf{I} Turn off {\bf i\/}nverse printing mode.\\ + \Pf{k} {\bf k\/}ind of error (warning, error, message).\\ + \Pf{l} {\bf l\/}ine number of error.\\ + \Pf{m} Warning {\bf m\/}essage.\\ + \Pf{n} Warning {\bf n\/}umber.\\ + \Pf{u} An {\bf u\/}nderlining line (like the one which + appears when using \Cmd{-v1}).\\ + \Pf{r} Part of line in front of error ($\mbox{`S'} - + 1$).\\ + \Pf{s} Part of line which contains error ({\bf + s\/}tring).\\ + \Pf{t} Part of line after error ($\mbox{`S'} + 1$). + \end{tabularx} + \smallskip + + Other characters will be passed literally; thus you can say + \Cmd{\%\%} to achieve a single percent sign in the output. + Please note that we may introduce other specifiers in the future, + so don't abuse this feature for other characters. + + Also, note that we do {\em not\/} support field lengths (yet). + This may come in the future, if I get the time\dots + + The {\tt -v} command is implemented by indexing into the \rsrc\ + file; read that for seeing how each format is implemented. If + you find yourself using a particular format often by using the + -f switch, consider putting it in the \rsrc\ file instead. + \item[{\tt -V [--pipeverb]}] Which entry we'll use in the \rsrc\ + file whenever {\tt stdout} isn't a terminal. + + The default is to use the same mode as specified with the + {\tt -v} switch; using {\tt -V} without any parameter will give you + mode 1. + + This switch was implemented because GNU less has problems with + the escape codes \chktex\ uses for displaying inverse text. + Under UNIX, there's another way around, though, which is slightly + more elegant. Add the following line to your \Cmd{.envir} file: +\begin{verbatim} +setenv LESS -r +\end{verbatim} + + \item[{\tt -p [--pseudoname]}] With this switch, you can provide + the filename which will be used when we report the errors. This + may be useful in scripts, especially when doing pipes. It is in + other words similar to C's \verb@#line@ directive. + + We will only assume this name for the uppermost file; files that + this one in turn \verb@\@\verb@input@ are presented under their original + names. This seems most logical to me. + + \item[{\tt -s [--splitchar]}] String to use instead of the + colons when doing {\tt -v0}; e.g.\ this string will be output + between the fields. + + \end{description} +\item[Boolean switches:] Common for all of these are that they + take an optional parameter. If it is {\tt 0}, the feature will + be disabled, if it is {\tt 1}, it will be enabled. All these + features are on by default; and are toggled if you don't give + any parameter. + + \begin{description} + \item[{\tt -b [--backup]}] If you use the {\tt -o} switch, and the + named outputfile exists, it will be renamed to {\tt filename.bak}. + \item[{\tt -I [--inputfiles]}] Execute \verb@\@\verb@input@ + statements; e.g.\ include the file in the input. Our input parsing + does of course nest; we use an input-stack to keep track of this. + \item[{\tt -H [--headererr]}] Show errors found in front of the + \verb@\begin{document}@ line. Some people keep {\em lots\/} of + pure \TeX\ code there, which errors can't be detected reliably + (in other words, we will in most cases just produce a lot of + garbage). + \item[{\tt -g [--globalrc]}] Read in the global resource file. This + switch may be useful together with the {\tt -l} option. + \item[{\tt -t [--tictoc]}] Display a twirling baton, to show that + we're working. {\tt -v0} does an {\tt -t0}, too, as it assumes + that the user then uses the program non-interactively. This is + now a no-op. + \item[{\tt -x [--wipeverb]}] Ignore the ``\verb@\verb@'' command + found within the \LaTeX\ file and its argument is completely by + the checking routines. This is done by simply overwriting them. + If you somehow don't like that (for instance, you would like to + count brackets inside those commands, too), use this switch. + \end{description} +\end{description} + + +If you don't specify any input \LaTeX-files on the commandline, we'll +read from {\tt stdin}. To abort {\tt stdin} input, press the +following keycombinations: + +\smallskip +\begin{tabular}{ll} + \bf Machine & \bf Key-combination \\ + UNIX & $\fbox{\tt Ctrl} + \fbox{\tt D}$ \\ + MS-DOS & $\fbox{\tt Ctrl} + \fbox{Z}$, followed by return. +\end{tabular} +\smallskip + +By default, we're using the 1994 version of GNU's \Cmd{getopt()} +routine. + +\begin{itemize} +\item Options may be given in any order; the names of the \LaTeX-files + do not have to be the last arguments. This behaviour may be turned + off by creating an environment variable named \Cmd{POSIXLY\_CORRECT}. +\item The special argument \Cmd{--} forces an end of + option-scanning. +\item Long-named options begin with \Cmd{--} instead of \Cmd{-}. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the argument, separated from + the option name by a \Cmd{=}, or else the in next argument. +\end{itemize} + +\subsubsection{The \rsrc\ file} + +You should also take a look at the \rsrc\ file. As the file is +self-documenting; you should be able to get the meaning of each +keyword by simply reading the file. The method for {\em finding it}, +however, has grown rather complex. An outline is given below. + +If \chktex\ finds multiple files when searching, each and everyone +will be read in the order specified below. The \Cmd{Keyword = \{ item + item \dots \}} may thus be necessary to reset previously defined +lists. + +In this list, \Cmd{\$foo} is assumed to be the environment variable +\Cmd{foo}: + +\begin{enumerate} +\item First, we'll take a look at the directory which was specified as + \Cmd{DATADIR} during compilation. On UNIX boxes, this usually evaluates to + \Cmd{/usr/local/share/chktexrc} or similar, under MS-DOS it is set + to \Cmd{\BS{}emtex\BS{}data\BS{}chktexrc}. + +\item Look in the following system directories: + + \begin{tabular}{ll} + \bf Machine & \bf Directory \\ + UNIX & \Cmd{\$HOME/.chktexrc} or \Cmd{\$LOGDIR/.chktexrc} \\ + MSDOS & Program installation path + \end{tabular} + +\item Look for it in the directory pointed to by an environment + variable, as specified in the table below: + + \begin{tabularx}\linewidth{lY} + \bf Machine & \bf Directory \\ + UNIX & \Cmd{\$CHKTEXRC/.chktexrc} \\ + MSDOS & \Cmd{\$CHKTEXRC\BS{}chktexrc}, \Cmd{\$CHKTEX\_HOME\BS + chktexrc} or \Cmd{\$EMTEXDIR\BS{}data\BS{}chktexrc} + \end{tabularx} + +\item Look for it in the current directory. On UNIX boxes, + we expect the filename to be \Cmd{.chktexrc}; on other machines + \Cmd{chktexrc}. + +\end{enumerate} + +If you for some reason wish to undo what the previous files may have +done, you may say \Cmd{CmdLine \{ -g0 -r \}} somewhere in the \rsrc\ +file; this will reset all previous settings. + + +\subsubsection{Hints} +I've tried to collect some advice that may be useful --- if you have a +favourite hint, feel free to send it to me! + +\begin{itemize} +\item If you use \Cmd{german.sty}; it may be wise to put \Cmd{-n18} in + the \Cmd{CmdLine} entry in the \rsrc\ file. This will probably reduce + the amount of false warnings significantly. +\item Put \Cmd{-v} in the \Cmd{CmdLine} entry of the \rsrc\ file; this + makes the fancy printing the default. +\item If you're working on a large project, it may pay off to make a + local resource file which is included in addition to the global + one. In this one, add the necessary info to reduce the amount of + false warnings --- these usually don't do anything but hide the + real warnings. +\item Create a total ignore environment, which \chktex\ will ignore + completely. In here, you can place all that code which outsmarts + \chktex\ completely. For instance, add the following lines at the top + of your \LaTeX\ file: +\begin{verbatim} +% ChkTeX will ignore material within this environment +\newenvironment{ignore}{}{} +\end{verbatim} + In addition, you should add the item \Cmd{ignore} to the \Cmd{VerbEnvir} + entry in the \rsrc\ file. +\end{itemize} +\subsubsection{Bugs} + +No fatal ones, I think, but the program currently has some problems when a +\LaTeX\ command/parameter stretch over a two lines --- some extra spaces +may be inserted into the input. I regard the program as fairly well +tested; using the SAS/C \Cmd{cover} utility I was able to make sure that +approximately 95\% of the code has actually been run successfully in the +final version. This does indeed leave some lines; most of these are +procedure terminating brackets or ``can't happen'' lines, though. + +We've got some problems when isolating the arguments of a command. +Although improved, it will certainly fail in certain cases; \chktex\ +can for instance not handle arguments stretching over two lines. This +also means that \Cmd{WIPEARG} entries in the \rsrc\ file will only +have the first half of their argument wiped if the argument stretches +over two lines. We will, however, take care not to wipe parenthesis +in such cases, in order to avoid false warnings. + +Before submitting a bug report, please first see whether the problem can be +solved by editing the \rsrc\ file appropiately. + + + +\subsection{ChkWEB} + +This shell script is provided for checking CWEB files. The template is +as follows: +\begin{verbatim} +chkweb [options] file1 file2 ... +\end{verbatim} +As you may see from the script, it is only a trivial interface towards +{\tt deweb} and \chktex. It does not support any individual options +on the command line --- all options found will be passed onto \chktex. +If \Cmd{--} or a filename is found, the remaining parameters will be +ignored. +The only real intelligence it features is that it will try to append +\verb@.w@ to filenames it can't find. + +If no filenames are given, we will read from {\tt stdin}. + +\subsection{DeWEB} + +This program strips away C code and CWEB commands from CWEB sources. +It is called with the following synopsis: + +\begin{verbatim} +deweb file1 file2 ... +\end{verbatim} + +{\tt deweb} filters away all C \&\ CWEB commands from a CWEB source code. +This leaves only the \LaTeX\ code. This stripped code, in turn, may then +be passed to a suitable syntax checker for \LaTeX, like \chktex\ and {\tt + lacheck}, or spell-checkers like {\tt ispell}. + +When {\tt deweb} strips away the C code from your CWEB source, it tries to +preserve line breaks. This means that the error reports from {\it your + favorite tool\/} will be correct regarding to line numbers. In most +cases, the column position will also be correct. This significantly +simplifies finding the errors in the \LaTeX\ source (in contrast to the +output from {\tt cweave}, which output is truly difficult to figure +anything out from). + +{\tt deweb} accepts a list of filenames on the argument line, and will send +its output to {\tt stdout}. If no filenames are given, it will read from +stdin, acting as a filter. No options are currently accepted. + +Macho users may try to pipe the output from {\tt deweb} directly into +\LaTeX, theoretically, this should work. This would ease the debugging of +the \LaTeX\ code significantly, as when \LaTeX\ complains about wrong +syntax, you'll be able to find the erroneous line much more easily. Don't +expect that the output looks very much like the final one, though. + +{\tt deweb} should now understand all correct {\tt CWEB} opcodes. If it +complains about not understanding a correct opcode, please inform the +author. + +\subsubsection{Bugs} + +{\tt deweb} will not even {\em compile\/} under Perl versions before perl +v5. Unfortunately, this means that we can't even tell the user why we +failed; Perl will just complain about not being able to compile the +regexps. + +\section{Explanation of error messages} +Below is a description of all error-messages \chktex\ outputs. +Error messages set in {\it italic type\/} are turned off by default. +Where margin paragraphs are listed in the text, they refer to the +keyword in the \rsrc\ file which controls the discussed warning. + +\newcommand\Keyword[1]{\marginpar{\large\tt\hfill\\ #1}} + +\smallskip\pagebreak[2] +\Keyword{Silent} +\begin{errdesc}{Command terminated with space.} + You tried to terminate a command with a blank space. Usually, this + is an error as these are ignored by \LaTeX. In most cases, you would + like to have a real space there. + + \begin{errexam} + \verb@\LaTeX@\underline{\tt }\verb@is a typesetter.@ \\* + \LaTeX is a typesetter. \\* + \smallskip + \verb@\LaTeX\ is a typesetter.@ \\* + \LaTeX\ is a typesetter. \\* + \end{errexam} +\end{errdesc} + +\Keyword{Linker} +\begin{errdesc}{Non-breaking space (`\~{}') should have been used.} + When reading a document, it is not very pretty when references are + split across lines. If you use the \verb@~@ character, \LaTeX\ will + assign a very high penalty for splitting a line at that point. + \chktex\ issues this warning if you have forgot to do this. + + \begin{errexam} + \verb@Please refer to figure@\underline{\tt\ }\verb@\ref{foo}.@ \\* + Please refer to figure 11. \\* % Gotta cheat here! :) + \smallskip + \verb@Please refer to figure~\ref{foo}.@ \\* + Please refer to figure~11. \\* + \end{errexam} +\end{errdesc} + +\begin{errdesc}{You should enclose the previous parenthesis with `\{\}'.} + + This is a warning which you may ignore, but for maximum aestethic + pleasure, you should enclose your bracket characters with `\{\}'s. + + \begin{errexam} + \verb@$@\underline{\tt\ }\verb@[(ab)^{-1}]@\underline{\tt\ }\verb@\^{-2}$@ \\* + $[(ab)^{-1}]^{-2}$ \\* + \smallskip + \verb@${[{(ab)}^{-1}]}^{-2}$@ \\* + ${[(ab)^{-1}]}^{-2}$ \\* + \end{errexam} +\end{errdesc} + +\Keyword{Italic\\ItalCmd\\NonItalic} +\begin{errdesc}{Italic correction (`\BS/') found in non-italic + buffer.} + If you try to use the \verb@\/@ command when \chktex\ believes that + the buffer is not outputted as italic, you'll get this warning. + + \begin{errexam} + \verb@This is an@\underline{\tt\BS/}\verb@ example@ \\* + This is an\/ example. \\* + \smallskip + \verb@This is an example.@ \\* + This is an example. \\* + \end{errexam} +\end{errdesc} + +\Keyword{Italic\\ItalCmd\\NonItalic} +\begin{errdesc}{Italic correction (`\BS/') found more than once.} + If the buffer is italic, and you try to use the \verb@\/@ command + more than once, you'll get this warning. + + \begin{errexam} + \verb@This {\it example\/@\underline{\tt\BS/}\verb@} is not amusing.@ \\* + This {\it example\/\/} is not amusing. \\* + \smallskip + \verb@This {\it example\/} is not amusing.@ \\* + This {\it example\/} is not amusing. \\* + \end{errexam} +\end{errdesc} + +\Keyword{Italic\\ItalCmd\\NonItalic} +\begin{errdesc}{No italic correction (`\BS/') found.} + You get this error if \chktex\ believes that you are switching from + italic to non-italic, and you've forgot to use the \verb@\/@ command + to insert that extra little spacing. If you use the \Cmd{em} option, + you may ignore this warning. + + \begin{errexam} + \verb@This {\it example@\underline{\tt\ }\verb@} is not amusing, either.@ \\* + This {\it example} is not amusing, either. \\* + \smallskip + \verb@This {\it example\/} is not amusing, either.@ \\* + This {\it example\/} is not amusing, either. \\* + \end{errexam} +\end{errdesc} + +\Keyword{IJAccent} +\begin{errdesc}{Accent command `command' needs use of `command'.} + If you're using accenting commands, `i' and `j' should lose their + dots before they get accented. This is accomplished by using the + \verb@\i@, \verb@\j@, \verb@\imath@ and \verb@\jmath@ command. + + \begin{errexam} + \verb@This is an example of use of accents: \'{@\underline{\tt i}\verb@}.@ \\* + This is an example of use of accents: \'{i}. \\* + \smallskip + \verb@This is an example of use of accents: \'{\i}.@ \\* + This is an example of use of accents: \'{\i}. \\* + \end{errexam} +\end{errdesc} + +\Keyword{HyphDash\\NumDash\\WordDash} +\begin{errdesc}{Wrong length of dash may have been used.} + This warning suggests that a wrong number of dashes may have been + used. It does this by classifying the dash according to the the + character in front and after the dashes. + + If they are of the same type, \chktex\ will determine which keyword + to use in the \rsrc\ file. If not, it will shut up and accept that + it doesn't know. + + \begin{tabular}{ll} + \bf Character type & \bf Keyword in \rsrc\ file \\* + Space & \tt WordDash \\* + Number & \tt NumDash \\* + Alphabetic character & \tt HyphDash \\* + \end{tabular} + + This is more or less correct, according to my references. Hopefully + this check can be even more improved (suggestions?). + + \begin{errexam} + \verb@It wasn't anything @\underline{\tt-}\verb@ just a 2@\underline + {\tt---}\verb@3 star@\underline{\tt--}\verb@shots.@ \\* + It wasn't anything - just a 2---3 star--shots. \\* + \smallskip + \verb@It wasn't anything --- just a 2--3 star-shots@ \\* + It wasn't anything --- just a 2--3 star-shots. \\* + \end{errexam} +\end{errdesc} + + +\fmted{`\%s' expected, found `\%s'.} +\begin{errdesc}{Solo `\%s' found.} + You get this warning whenever brackets or environments don't match. + \chktex\ expect to find matching brackets/environments in the + same order as their opposites were found, and no closing delimiters + which haven't been preceded by an opening one. + + While bracket matching is not an explicit error, it is usually a + sign that something is wrong. + +\end{errdesc} + +\Keyword{CenterDots\\LowDots} +\begin{errdesc}{You should use `\%s' to achieve an ellipsis.} + Simply typing three \Cmd{.} in a row will not give a perfect spacing + withing the between the dots. The \verb@\ldots@ is much more + suitable for this. + + In math mode, you should also distinguish between \verb@\cdots@ and + \verb@\ldots@; take a look at the example below. + + \begin{errexam} + \newcommand{\td}{\underline{\tt...}} + \verb@Foo@\td\verb@bar. $1,@\td\verb@,3$. $1+@\td\verb@+3$. $1,@% + \underline{\tt\BS{}cdots}\verb@,3$.@ \\* + Foo...bar. $1,...,3$. $1+...+3$. $1,\cdots,3$. \\* + \smallskip + \verb@Foo\dots bar. $1,\ldots,3$. $1+\cdots+3$. $1,\ldots,3$.@ \\* + Foo\dots bar. $1,\ldots,3$. $1+\cdots+3$. $1,\ldots,3$. \\ + \end{errexam} +\end{errdesc} + +\Keyword{Abbrev} +\begin{errdesc}{Interword spacing (`\BS\ ') should perhaps be used.} + + One of the specified abbreviations were found. Unless you have + previously said \verb@\frenchspacing@, you'll have incorrect + spacing, which one should avoid if possible. + + \begin{errexam} + \verb@This is an example, i.e.@\underline{\tt\ }\verb@an demonstration.@ \\* + This is an example, i.e. an demonstration. \\* + \smallskip + \verb@This is an example, i.e.\ an demonstration.@ \\* + This is an example, i.e.\ an demonstration. \\* + \end{errexam} +\end{errdesc} + +\begin{errdesc}{Intersentence spacing (`\BS{}@') should perhaps be used.} + + \LaTeX' detection of whether a period ends a sentence or not, is + only based upon the character in front of the period. If it's + uppercase, it assumes that it does not end a sentence. While this + may be correct in many cases, it may be incorrect in others. + \chktex\ thus outputs this warning in every such case. + + \begin{errexam} + \verb@I've seen an UFO!@\underline{\tt\ }\verb@Right over there!@ \\* + I've seen an UFO! Right over there! \\* + \smallskip + \verb+I've seen an UFO\@! Right over there!+ \\* + I've seen an UFO\@! Right over there! \\* + \end{errexam} +\end{errdesc} + +\begin{errdesc}{Could not find argument for command.} + + \chktex\ will in some cases need the argument of a function to + detect an error. As \chktex\ currently processes the \LaTeX\ file on + a line-by-line basis, it won't find the argument if the command + which needed it was on the previous line. On the other hand, this + {\em may\/} also be an error; you ought to check it to be safe. + + \begin{errexam} + \verb@$\hat$@ \\* + This will give a \LaTeX\ error\dots \\* + \smallskip + \verb@$\hat{a}$@ \\* + $\hat{a}$ \\* + \end{errexam} +\end{errdesc} + +\begin{errdesc}{No match found for `\%s'.} + + This warning is triggered if we find a single, {\em opening\/} + bracket or environment. While bracket matching is not an explicit + error, it is usually a sign that something is wrong. + +\end{errdesc} + +\Keyword{MathEnvir} +\begin{errdesc}{Mathmode still on at end of LaTeX file.} + This error is triggered if you at some point have turned on + mathmode, and \chktex\ couldn't see that you remembered to turn it + off. + +\end{errdesc} + +\begin{errdesc}{Number of `character' doesn't match the number of `character'.} + + Should be self-explanatory. \chktex\ didn't find the same number of + an opening bracket as it found of a closing bracket. + +\end{errdesc} + +\begin{errdesc}{You should use either `` or '' as an alternative to `\,"\,'.} + Self-explanatory. Look in the example, and you'll understand why. + + \begin{errexam} + \verb@This is an @\underline{\tt"}\verb@example@\underline{\tt"} \\* + This is an "example" \\* + \smallskip + \verb@This is an ``example''@ \\* + This is an ``example'' \\* + \end{errexam} +\end{errdesc} + +\begin{errdesc}{You should use "'" (ASCII 39) instead of + "'" (ASCII 180).} On some keyboards you might get the wrong quote. + This quote looks, IMHO, {\em ugly\/} compared to the standard + quotes, it doesn't even come out as a quote! Just see in the + example. + + + \begin{errexam} + \verb@``There@\underline{\tt '}\verb@s quotes and there@\underline{\tt '}\verb@s quotes@ + \underline{\tt ''} \\* % '' + ``There´s quotes and there´s quotes´´ \\* % '' + \smallskip + \verb@``There's quotes and there's quotes''@ \\* + ``There's quotes and there's quotes'' \\* + \end{errexam} +\end{errdesc} + +\Keyword{Userwarn} +\begin{errdesc}{User-specified pattern found.} + A substring you've specified using {\tt USERWARN} in the \rsrc\ file, + has been found. +\end{errdesc} + +\begin{errdesc*}{This command might not be intended.} + I implemented this because a friend of mine kept on making these + mistakes. Easily done if you haven't gotten quite into the syntax + of \LaTeX. + + \begin{errexam} + \verb@\LaTeX\ is an extension of \TeX@\underline{\tt\BS.}\verb@ Right?@ \\* + \LaTeX\ is an extension of \TeX\. Right? \\* + \smallskip + \verb@\LaTeX\ is an extension of \TeX. Right?@ \\* + \LaTeX\ is an extension of \TeX. Right? \\* + \end{errexam} +\end{errdesc*} + +\begin{errdesc*}{Comment displayed.} + \chktex\ dumps all comments it finds, which in some cases is useful. + I usually keep all my notes in the comments, and like to review them + before I ship the final version. For commenting out parts of the + document, the \Cmd{comment} environment is better suited. + +\end{errdesc*} + + +\begin{errdesc}{Either ''\BS,' or '\BS,'' will look better.} + + This error is generated whenever you try to typeset three quotes in + a row; this will not look pretty, and one of them should be + separated from the rest. + + \begin{errexam} + \underline{\tt```}\verb@Hello', I heard him said'', she remembered.@ \\* + ```Hello', I heard him said'', she remembered. \\* + \smallskip + \verb@``\,`Hello', I heard him said'', she remembered.@ \\* + ``\,`Hello', I heard him said'', she remembered. + \end{errexam} +\end{errdesc} + +\Keyword{PostLink} +\begin{errdesc}{Delete this space to maintain correct pagereferences.} + This message, issued when a space is found in front of a + \verb@\index@, \verb@\label@ or similar command (can be set in the + \rsrc\ file). Sometimes, this space may cause that the word and the + index happens on separate pages, if a pagebreak happens just there. + + You might also use this warning to warn you about spaces in front of + footnotes; however, the warning text may not be entirely correct + then. + + \begin{errexam} + \verb@Indexing text@\underline{\tt\ }\verb@\index{text} is fun!@ \\* + \smallskip + \verb@Indexing text\index{text} is fun!@ \\* + \end{errexam} +\end{errdesc} + +\begin{errdesc}{You might wish to put this between a pair of `\{\}'} + + This warning is given whenever \chktex\ finds a \Cmd{\^{ }}' or a + \Cmd{\_} followed by either two or more numberic digits or two or + more alphabetic characters. In most situations, this means that + you've forgotten some \{\}'s. + + \begin{errexam} + \verb@$5\cdot10^@\underline{\tt10}\verb@$@ \\* + $5\cdot10^10$ \\* + \smallskip + \verb@$5\cdot10^{10}$@ \\* + $5\cdot10^{10}$ + \end{errexam} +\end{errdesc} + +\begin{errdesc}{You ought to remove spaces in front of punctuation.} + + This warning is issued if \chktex\ finds space in front of an + end-of-sentence character. + + \begin{errexam} + \verb@Do you understand@\underline{\tt\ }\verb@?@ \\* + Do you understand ? \\* + \smallskip + \verb@Do you understand?@ \\* + Do you understand? \\* + \end{errexam} +\end{errdesc} + +\begin{errdesc}{Could not execute LaTeX command.} + + Some \LaTeX\ commands will be interpreted by \chktex; however, some + of them are sensible to errors in the \LaTeX\ source. Most notably, + the \verb@\@\verb@input@ command relies on that the input file exists\dots + +\end{errdesc} + +\Keyword{Italic\\ItalCmd\\NonItalic} +\begin{errdesc}{Don't use \BS/ in front of small punctuation.} + Italic correction should generally {\em not\/} be used in front of + small punctuation characters like `.' and `,'; as it looks better + when the preceding italic character leans ``over'' the punctum or + comma. + + \begin{errexam} + \verb@It is just a {\it test@\underline{\tt\BS/}\verb@}, don't think anything else.@ \\* + It is just a {\it test\/}, don't think anything else. \\* + \smallskip + \verb@It is just a {\it test}, don't think anything else.@ \\* + It is just a {\it test}, don't think anything else. + \end{errexam} +\end{errdesc} + +\begin{errdesc}{\$\BS{}times\$ may look prettier here.} + In ASCII environments, it is usual to use the `x' character as an + infix operator to denote a dimension. The mathemathical symbol + $\times$ provided by the \verb@$\times$@ command is better suited for + this. + + \begin{errexam} + \verb@The program opens a screen sized 640@\underline{\tt x}\verb@200 pixels.@ \\* + The program opens a screen sized 640x200 pixels. \\* + \smallskip + \verb@The program opens a screen sized $640\times200$ pixels.@ \\* + The program opens a screen sized $640\times200$ pixels. + \end{errexam} +\end{errdesc} + +\begin{errdesc*}{Multiple spaces detected in output.} + + This warning, intended for the novice, will remind you that even if + you {\em type\/} multiple spaces in your input, only a single space + will come out. Some ways to come around this is listed below. + + \begin{errexam} + \verb@White is a beautiful colour.@ \\* + White is a beautiful colour. \\* + \smallskip + \verb@White~~~~~{ }{ }{ }\ \ \ is a beautiful colour.@ \\* + White~~~~~{ }{ }{ }\ \ \ is a beautiful colour. \\ + \end{errexam} +\end{errdesc*} + +\Keyword{VerbEnvir} +\begin{errdesc}{This text may be ignored.} + Certain implementations of the \verb@verbatim@ environment and + derivations of that, ignore all text on the same line as + \verb@\end{verbatim}@. This will warn you about this. + + +\end{errdesc} + +\fmted{Use ` to begin quotation, not '.}\hfill\\ +\fmted{Use ' to end quotation, not `.}\hfill\\ +\begin{errdesc}{Don't mix quotes.} + + Proper quotations should start with a \verb@`@ and end with a + \verb@'@; anything else isn't very pretty. Both these warnings are + relative to this; look in the example below. + + \begin{errexam} + \verb@There are @\underline{\tt`'}% + \verb@examples'' and there are ``examples@\underline{\tt``}\verb@.@ \\* + There are `'examples'' and there are ``examples``. \\* + \smallskip + \verb@There are ``examples'' and there are ``examples''.@ \\* + There are ``examples'' and there are ``examples''. + \end{errexam} +\end{errdesc} + +\Keyword{MathRoman} +\begin{errdesc}{You should perhaps use `cmd' instead.} + Most mathematical operators should be set as standard roman font, + instead of the math italic \LaTeX\ uses for variables. For many + operators, \LaTeX\ provides a pre-defined command which will typeset + the operator correctly. Look below for an illustration of the point. + + \begin{errexam} + \verb@$@\underline{\tt sin}\verb@^2 x + @\underline{\tt cos}\verb@^2 x = 1$@ \\* + $sin^2 x + cos^2 x= 1$ \\* + \smallskip + \verb@$\sin^2 x + \cos^2 x = 1$@ \\* + $\sin^2 x + \cos^2 x = 1$ + \end{errexam} +\end{errdesc} + +\fmted{You should put a space in front of/after parenthesis.}\hfill\\ +\begin{errdesc}{You should avoid spaces in front of/after parenthesis.} + Outside math mode, you should put a space in front of any group of + opening parenthesis, and no spaces after. If you have several after + each other, you should of course not put a space in between each; + look in the example below. Likewise, there should not be spaces in + front of closing parenthesis, but there should be at least one + after. + + + + \begin{errexam} + \verb@This@\underline{\tt( }\verb@an example@\underline{\tt( }% + \verb@Nuff said@\underline{\tt\ }\verb@)), illustrates@\underline{\tt( }% + \verb@``my''@\underline{\tt\ )}\verb@point.@\\ + This( an example( Nuff said )), illustrates( ``my'' )point. \\ + \smallskip + \verb@This (an example (Nuff said)), illustrates (``my'') point.@\\ + This (an example (Nuff said)), illustrates (``my'') point.\\ + \end{errexam} +\end{errdesc} + +\Keyword{QuoteStyle} +\begin{errdesc}{You should not use punctuation in front of/after + quotes.} + % + For best looking documents, you should decide on how you + wish to put quotes relative to punctuation. \chktex\ recognizes two + styles; you may specify which you use in the \rsrc\ file. A + description on each style follows: + \begin{description} + \item[Traditional:] This style is the most visually pleasing. It + always puts the punctuation {\em in front of\/} the quotes, which + gives a continuous bottom line. + + However, it may in certain cases be ambigious. Consider the + following example from a fictious \Cmd{vi(1)} + tutorial (quote taken from the Jargon file): + \begin{center} + \verb@Then delete a line from the file by typing ``dd.''@ \\* + Then delete a line from the file by typing ``dd.'' + \end{center} + That would be very bad --- because the reader would be prone to + type the string d-d-dot, and it happens that in \Cmd{vi(1)} dot + repeats the last command accepted. The net result would be to + delete {\em two\/} lines! This problem is avoided using logical + style, described below. + \pagebreak[3] + \item[Logical:] This style uses quotes as balanced delimiters like + parentheses. While this is not the most visual pleasing, it is + can't be misunderstood. The above sentence would then become: + \nopagebreak + \begin{center} + \verb@Then delete a line from the file by typing ``dd''.@ \\* + Then delete a line from the file by typing ``dd''. + \end{center} + \nopagebreak + \end{description} + +\end{errdesc} + +\begin{errdesc}{Double space found.} + This warning is triggered whenever \chktex\ finds a space in front + of a hard space, or vice versa. This will be rendered as two spaces + (which you usually don't wish). + + \begin{errexam} + \verb@For output codes, see table@\underline{\tt\ }% + \verb@~@\underline{\tt\ }\verb@\ref{foo}.@ \\* + For output codes, see table ~ 1.1.\\* + \smallskip + \verb@For output codes, see table~\ref{foo}.@ \\* + For output codes, see table~1.1. + \end{errexam} +\end{errdesc} + +\Keyword{MathEnvir} +\begin{errdesc}{You should put punctuation outside inner/inside + display math mode.} + As recommended in the \TeX{}book, you should try to put punctuation + outside inner math mode, as this is gets formatted better. + + Similarily, you should let any final punctuation in display math + mode end up within it. Look at the following example, which was + taken from the \TeX{}book: + \begin{errexam} + \verb@for $x = a@\underline{\tt,}\verb@b$, or $c$.@\\* + for $x = a,b$, or $c$. \\* + \smallskip + \verb@for $x = a$, $b$, or $c$.@\\* + for $x = a$, $b$, or $c$.\\* + \end{errexam} + +\end{errdesc} + +\Keyword{Primitives} +\begin{errdesc*}{You ought to not use primitive TeX in LaTeX code.} + This warning is triggered whenever you use a raw \TeX\ command + which has been replaced by a \LaTeX\ equivalent. If you consider + yourself a purist (or want to be sure your code works under \LaTeX3), + you should use the \LaTeX\ equivalent. +\end{errdesc*} + +\Keyword{NotPreSpaced} +\begin{errdesc}{You should remove spaces in front of `\%s'} + + Some commands should not be prepended by a space character, for cosmetical + reasons. This notes you of this whenever this has happened. + + \begin{errexam} + \verb@This is a footnote@\underline{\tt\ }\verb@\footnotemark[1] mark.@\\* + This is a footnote ${}^1$ mark. \\* + \smallskip + \verb@This is a footnote\footnotemark[1] mark.@\\* + This is a footnote${}^1$ mark. \\* + \end{errexam} +\end{errdesc} + +\Keyword{NoCharNext} +\begin{errdesc}{`\%s' is normally not followed by `\%c'.} + \LaTeX' error message when calling \verb@\left \{@ instead of + \verb@left \{@ is unfortunately rather poor. This warning detects + this and similar errors. +\end{errdesc} + +\section{Future plans} + +In a somewhat prioritized sequence, this is what I'd like to put into the +program --- if I have the time. + +\begin{itemize} +\item Do a final fix for maths mode. Currently, \chktex\ doesn't + recognize embedded math mode (i.e.\ constructions like + \verb@$$a+b\text{for $a \leq 0$}$$@). + +\item Support for regular expressions as user patterns. I'll do it at + once I get the GNU \Cmd{rx} package up and running (it doesn't + produce correct include files). + +\item De-linearize the checker. Currently, it works on a line-by-line + basis, in most respects, at least. I hope to be able to remove this + barrier; as this will reduce the amount of false warnings + somewhat. + +\item Probably some more warnings/errors; just have to think them out + first. Suggestions are appreciated --- I've ``stolen'' most that + similar programs provides, and am running out of ideas, really. + + It would also be nice to investigate the field of ``globally'' + oriented warnings; i.e.\ warnings regarding the document as a + whole. Currently, \chktex\ operates mainly on a local/``greedy'' + basis. + + If you have suggestions/ideas on this topic, they're certainly + welcome, including references to literature. + +\item Fix a few more bugs. +\end{itemize} + +\section{Notes} + +\subsection{Wish to help?} + +As most other living creatures, I have only a limited amount of time. If +you like \chktex\ and would like to help improving it, here's a few things +I would like to receive. The following ideas are given: + +\begin{itemize} +\item Does anyone have a $\mbox{\LaTeX}\rightarrow \mbox{{\tt troff}}$ + conversion program? It would be really nice if I could extract the + relevant sections from this manual, and present them as a man page. + I will not, however, convert this manual to \TeX{}info in order to + be able to do this; IMHO \TeX{}info documents have far too limited + typographic possibilities. + + This doesn't mean that I'm not willing to restructure the document + at all. This manual already uses some kind of preprocessing in order + to achieve HTML output via \LaTeX2{\tt html}, I'm willing to do the + same in order to produce {\tt troff} output. + +\item Help me port the program! This is a prioritized one. It's no fun + writing ANSI C when people haven't got a C compiler. + + Of course, I'll provide whatever help necessary to modify the sources + to fit to the new platform. Take contact if you're interested. I will + include your compiled binary in the distribution, and give you + credit where appropiate. + + Just one request: If you have to modify the sources in order to make + \chktex\ compile \& work on the new platform, {\em please\/} enclose your + changes in something like \Cmd{\#ifdef \_\_PLATFORM\_\_\dots code\dots\#endif}! + It makes life so much easier later, when we try to merge the two + source trees. + +\item Reports on problems configuring and compiling \chktex\ on supported + (and unsupported) systems are welcomed. + +\item Filters for other file formats. I do believe that there are + several formats using \LaTeX\ for its formatting purposes, combining + that with something else. If you can write a program or script which + filters everything away but the \LaTeX\ code, it will surely be + appreciated (and included). Look at the \verb@deweb@ script to see + what I mean. + +\item Arexx interfaces for other editors are also welcomed; these + should be rather fast to write. They should to the following: + \begin{enumerate} + \item Get the filename of the active file. + \item If possible, save the file to disk if there has been any + changes. + \item Call the program \Cmd{ChkTeX.rexx} with the filename as the + only parameter. + \end{enumerate} + +\item If somebody out there actually possesses (and uses) GoldED, it + would be nice if they checked whether the ARexx script included + actually work. If not, please send me a fixed copy; perhaps also + one which supports point 2 above, too. If it does work, then please + tell me so, so I can remove this item. + + I don't have GoldEd in my possession; the script was just modelled + after Juergen Zeschky's, ({\tt <juergen@sokrates.nbg.de>}) + $\mbox{PGP}\leftrightarrow\mbox{GoldED}$ interface. + +\item If you update the \rsrc\ file in anyway that is not strictly + local, I would appreciate to receive your updated version. + +\item Suggestions for new warnings are always welcomed. Both formal + (i.e.\ regexps or similar) and non-formal (plain English) descriptions + are welcomed. +\end{itemize} + +Of course, people doing any of this will be mentioned in this document, and +thus receive eternal glory and appreciation. + +\subsection{Caps and stuff} + +This program uses the \Cmd{getopt()} routine, as supplied from GNU\@. +The source included in this distribution has been modified slightly. +To make the use of C2LOCAL easier, portions which were +\verb@#ifdef@'ed out, have now been commented out. + +Where trademarks have been used, the author is aware of that they +belong to someone, and has tried to stick to the original caps. + +\section{About the author} + +A quick summary of who I am and what I do: + +I'm 21 years old, and live in Oslo, the capital of Norway. I'm +currently studying maths and computer science at the +University~of~Oslo; planning to get a degree within mathematical +modeling, with a dash of physics and emphazing the computer part of +the study. More precisely, in autumn'96 my studies consist of +mathematical analysis, statistics \& probability calculations plus +studying the relationship between society and computers. + +At home I now possess 4 computers, of which 1 is regular use: A +vanilla Amiga 1200, expanded only by a HD\@. The others are a {\tt + 80286} PC and an Amiga 500, both semi-out-of-order. The last one is +a Commodore VIC-20, which for some peculiar reason never seems to be +used. Plans are to get a Linux-capable PC, though. + +Most of the time in front of these computers (including SGI Indy's and +SPARC stations at our university) is spent on C and shell programming, +plus some text-processing. + + % I am also involved in writing the document + % for {\sc Isaac} --- Interactive Simulation as an Alternative to + % Advanced Calculations. This is planned to help newcomers to physics, + % by providing a computer program which enables one to simulate most + % experiments relating to classical mechanics. + % + +C and shell programming are not my only knowledge areas regarding +computers, however. I write the following languages more or less: +Perl, Motorola {\tt 68000} assembly code, ARexx, Simula, C++, \LaTeX, +HTML, AmigaGuide, Amos Basic and Installer LISP\@. Once I also +mastered Commodore Basic V2, the ``language'' included with my VIC-20. + +However, I also try to not to end up as a computer nerd. Thus, in +addition to the compulsory (?) interest for computers, I am a scout. +Still running into the woods, climbing the trees, falling down and +climbing up once more, in other words. To be more specific, I am a +now a troop leader for `Ulven' scout-group; Norwegian Scouts +Association. I am also a active rover in `V{\aa}lerenga' scout-group. + +Certainly a lot more to tell (I play the piano and like cross-country +skiing, for instance); but I'll stop here before you fall +asleep\dots + + +\section{Thanks} + +The author wishes to thank the following people (in alphabetical order): + +\def\Name#1#2{% +\item[] + \setbox0=\hbox{ + \begin{tabular}{l} + \bf #1 \\ + \tt #2 \\ + \end{tabular} + } \usebox0\\ } + +\begin{description} + + \Name{Russ Bubley}{russ@scs.leeds.ac.uk} + He has been the main external beta-tester for this program, sending + me loads and loads of understandable and reproducible bug reports. + If you somehow think that \chktex\ is well-behaved and free from + bugs, send warm thoughts to Russ. He has also provided ideas for + enhanced checks and so forth. + + In addition, he sent me a huge list of 238 common English + abbreviations, for inclusion in the \rsrc\ file! Together with the + enhanced abbreviation recognizer, I do now believe most + abbreviations should be catched\dots + + Finally, he has also given me valuable hints for improving the + program's outputting routine, and given me lots of suggestions for + filtering unnecessary/false warnings away. + + \Name{Gerd B\"ohm}{Gerd.Boehm@physik.uni-regensburg.de} + Improved and bug-fixed the MS-DOS port of \chktex\ v1.4, sending me + ready-to-yank code patches. The original port didn't respect all + the peculiarities of the MS-DOS file-system, unfortunately. + + \Name{Lars Frellesen}{frelle@math-tech.dk} Sent a few bug reports + regarding the filtering of messages. He has also helped me to + expand the \Cmd{SILENT} keyword in the \rsrc\ file. + + \Name{Wolfgang Fritsch}{fritsch@hmi.de} + Author of the OS/2 port, which he did using the emx compiler. + Please direct questions regarding strictly to that port to him (I + would like to receive a carbon copy, though). + + \Name{Stefan Gerberding}{stefan@inferenzsysteme.informatik.th-darmstadt.de} + First one to report the Enforcer hit in v1.2 when using \chktex\ as + a pipe. Also came with suggestions to make \chktex\ more easily + compile on early gcc compilers. + + He has also kept on beta-testing later versions of \chktex, giving + me bug-reports and enhancements requests. + + \Name{Kasper B. Graversen}{kbg2001@internet.dk} Lots of creative + suggestions and improvements. Several of the warnings implemented + were based on his ideas. In addition, he has given advice for + improving the existing warnings. + + Has also provided some OS-oriented code. + + \Name{Frank Luithle}{f\_luithle@outside.sb.sub.de} + Wrote a translation for v1.0. Unfortunately, he remained unreachable + after that\dots:-/ + + \Name{Nat}{nat@nataa.frmug.fr.net} + Reported the same bug as Gerberding. In addition, he taught me a + few tricks regarding the use of gcc + made me understand that the + ANSI standard isn't unambigious; at least the \verb@getenv()@ call + seem to be open for interpretations. Many possible + incompatibilities have been removed due to these lessons. + + \Name{Michael Sanders}{sanders@umich.edu} + Has found some of the bugs in this beast; both obscure and + long-lived. Has also provided motivation to clarify this document. + + \Name{Bj\o rn Ove Thue}{bjort@ifi.uio.no} + Author of the MSDOS port; please direct questions regarding + strictly to that port to him (I would like to receive a carbon + copy, though). + + \Name{Martin Ward}{Martin.Ward@durham.ac.uk} + Sent a few bug-reports; also gave me information upon where to find + regexp code. He also provided a Perl script for checking ordinary + text, which ideas I was able to implement in \chktex. In addition, + he sent me the source code for \verb@lacheck@; which also inspired some + of the warnings. +\end{description} + +%endlatex +\section{Contacting the author} + +If you wish to contact me for any reason or would like to participate in +the development of \chktex, please write to: +%latex +\begin{samepage} +%endlatex + \begin{quote} + Jens Berger \\ + Spektrumvn. 4 \\ + N-0666 Oslo \\ + Norway \\ + E-mail: {\tt <jensthi@ifi.uio.no>} + \end{quote} +%latex +\end{samepage} +%endlatex +Any signs of intelligent life are welcomed; that should exclude piracy. + +Since the original author is unreachable, the maintainer these days is: +%latex +\begin{samepage} +%endlatex + \begin{quote} + Baruch Even \\ + E-mail: {\tt <chktex@ev-en.org>} + \end{quote} +%latex +\end{samepage} +%endlatex + +\medskip\noindent +Have fun. + +\end{document} + diff --git a/Build/source/utils/chktex/Makefile.am b/Build/source/utils/chktex/Makefile.am index ce5efdb938e..10225a5e956 100644 --- a/Build/source/utils/chktex/Makefile.am +++ b/Build/source/utils/chktex/Makefile.am @@ -22,9 +22,10 @@ EXTRA_DIST = $(CHKTEX_TREE) ## EXTRA_DIST += $(CHKTEX_TREE)-PATCHES -# in case of an SVN repository +# in case of an SVN repository, remove a generated file. dist-hook: rm -rf `find $(distdir) -name .svn` + rm -f $(distdir)/$(CHKTEX_TREE)/ChkTeX.tex AM_CFLAGS = $(WARNING_CFLAGS) @@ -56,7 +57,28 @@ config_DATA = $(CHKTEX_TREE)/chktexrc # documentation pdfdocdir = ${prefix}/texmf/doc/chktex -pdfdoc_DATA = +dist_pdfdoc_DATA = ChkTeX.pdf + +ChkTeX.pdf: $(PDF_DEPEND) + $(PDFLATEX) -interaction batchmode $(srcdir)/ChkTeX.tex + $(PDFLATEX) -interaction batchmode $(srcdir)/ChkTeX.tex +CLEANFILES = ChkTeX.aux ChkTeX.log + +## We distribute ChkTeX.tex (generated from $(CHKTEX_TREE)/ChkTeX.tex.in) +## and ChkTeX.pdf, but also need rules to create them if missing or +## (in maintainer-mode) to update them if required. +.PHONY: build-tex +all-local: stamp-tex +stamp-tex: $(CHKTEX_TREE)/ChkTeX.tex + $(MAKE) $(AM_MAKEFLAGS) build-tex + $(MAKE) $(AM_MAKEFLAGS) ChkTeX.pdf + echo timestamp >$@ +DISTCLEANFILES = stamp-tex +build-tex: + cmp -s $(CHKTEX_TREE)/ChkTeX.tex $(srcdir)/ChkTeX.tex \ + || cp $(CHKTEX_TREE)/ChkTeX.tex $(srcdir)/ChkTeX.tex + +EXTRA_DIST += ChkTeX.tex # chktex tests TESTS = chktex.test @@ -65,5 +87,5 @@ TESTS_ENVIRONMENT = CHKTEX_TREE=$(CHKTEX_TREE) EXTRA_DIST += chktex.test -CLEANFILES = chktest +CLEANFILES += chktest diff --git a/Build/source/utils/chktex/Makefile.in b/Build/source/utils/chktex/Makefile.in index a0e5d235dd3..cfaa6ba933a 100644 --- a/Build/source/utils/chktex/Makefile.in +++ b/Build/source/utils/chktex/Makefile.in @@ -36,7 +36,7 @@ POST_UNINSTALL = : bin_PROGRAMS = chktex$(EXEEXT) subdir = . DIST_COMMON = $(am__configure_deps) $(dist_man_MANS) \ - $(srcdir)/../../build-aux/depcomp \ + $(dist_pdfdoc_DATA) $(srcdir)/../../build-aux/depcomp \ $(srcdir)/../../build-aux/install-sh \ $(srcdir)/../../build-aux/missing $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ @@ -55,7 +55,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = ChkTeX.tex deweb.pl +CONFIG_CLEAN_FILES = chktex-1.6.4/ChkTeX.tex deweb.pl CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(configdir)" "$(DESTDIR)$(pdfdocdir)" @@ -98,7 +98,7 @@ am__base_list = \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) -DATA = $(config_DATA) $(pdfdoc_DATA) +DATA = $(config_DATA) $(dist_pdfdoc_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ @@ -157,6 +157,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PDFLATEX = @PDFLATEX@ +PDF_DEPEND = @PDF_DEPEND@ PERL5 = @PERL5@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ @@ -212,7 +214,8 @@ top_srcdir = @top_srcdir@ # #************************************************************************ ACLOCAL_AMFLAGS = -I ../../m4 -EXTRA_DIST = $(CHKTEX_TREE) $(CHKTEX_TREE)-PATCHES chktex.test +EXTRA_DIST = $(CHKTEX_TREE) $(CHKTEX_TREE)-PATCHES ChkTeX.tex \ + chktex.test AM_CFLAGS = $(WARNING_CFLAGS) chktex_SOURCES = \ $(CHKTEX_TREE)/ChkTeX.c \ @@ -239,12 +242,13 @@ config_DATA = $(CHKTEX_TREE)/chktexrc # documentation pdfdocdir = ${prefix}/texmf/doc/chktex -pdfdoc_DATA = +dist_pdfdoc_DATA = ChkTeX.pdf +CLEANFILES = ChkTeX.aux ChkTeX.log chktest +DISTCLEANFILES = stamp-tex # chktex tests TESTS = chktex.test TESTS_ENVIRONMENT = CHKTEX_TREE=$(CHKTEX_TREE) -CLEANFILES = chktest all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am @@ -301,7 +305,7 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) distclean-hdr: -rm -f config.h stamp-h1 -ChkTeX.tex: $(top_builddir)/config.status $(top_srcdir)/chktex-1.6.4/ChkTeX.tex.in +chktex-1.6.4/ChkTeX.tex: $(top_builddir)/config.status $(top_srcdir)/chktex-1.6.4/ChkTeX.tex.in cd $(top_builddir) && $(SHELL) ./config.status $@ deweb.pl: $(top_builddir)/config.status $(top_srcdir)/chktex-1.6.4/deweb.in cd $(top_builddir) && $(SHELL) ./config.status $@ @@ -499,10 +503,10 @@ uninstall-configDATA: test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(configdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(configdir)" && rm -f $$files -install-pdfdocDATA: $(pdfdoc_DATA) +install-dist_pdfdocDATA: $(dist_pdfdoc_DATA) @$(NORMAL_INSTALL) test -z "$(pdfdocdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdocdir)" - @list='$(pdfdoc_DATA)'; test -n "$(pdfdocdir)" || list=; \ + @list='$(dist_pdfdoc_DATA)'; test -n "$(pdfdocdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -512,9 +516,9 @@ install-pdfdocDATA: $(pdfdoc_DATA) $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdocdir)" || exit $$?; \ done -uninstall-pdfdocDATA: +uninstall-dist_pdfdocDATA: @$(NORMAL_UNINSTALL) - @list='$(pdfdoc_DATA)'; test -n "$(pdfdocdir)" || list=; \ + @list='$(dist_pdfdoc_DATA)'; test -n "$(pdfdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pdfdocdir)' && rm -f" $$files ")"; \ @@ -830,7 +834,7 @@ distcleancheck: distclean check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am -all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) config.h +all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) config.h all-local installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(configdir)" "$(DESTDIR)$(pdfdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -857,6 +861,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -884,7 +889,8 @@ info: info-am info-am: -install-data-am: install-configDATA install-man install-pdfdocDATA +install-data-am: install-configDATA install-dist_pdfdocDATA \ + install-man install-dvi: install-dvi-am @@ -931,35 +937,51 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-configDATA uninstall-man \ - uninstall-pdfdocDATA +uninstall-am: uninstall-binPROGRAMS uninstall-configDATA \ + uninstall-dist_pdfdocDATA uninstall-man uninstall-man: uninstall-man1 .MAKE: all check-am install-am install-strip -.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \ - clean clean-binPROGRAMS clean-generic ctags dist dist-all \ - dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS \ - install-configDATA install-data install-data-am install-dvi \ +.PHONY: CTAGS GTAGS all all-am all-local am--refresh check check-TESTS \ + check-am clean clean-binPROGRAMS clean-generic ctags dist \ + dist-all dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar \ + dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-configDATA install-data \ + install-data-am install-dist_pdfdocDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-pdfdocDATA \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-configDATA \ - uninstall-man uninstall-man1 uninstall-pdfdocDATA + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-configDATA uninstall-dist_pdfdocDATA uninstall-man \ + uninstall-man1 -# in case of an SVN repository +# in case of an SVN repository, remove a generated file. dist-hook: rm -rf `find $(distdir) -name .svn` + rm -f $(distdir)/$(CHKTEX_TREE)/ChkTeX.tex + +ChkTeX.pdf: $(PDF_DEPEND) + $(PDFLATEX) -interaction batchmode $(srcdir)/ChkTeX.tex + $(PDFLATEX) -interaction batchmode $(srcdir)/ChkTeX.tex + +.PHONY: build-tex +all-local: stamp-tex +stamp-tex: $(CHKTEX_TREE)/ChkTeX.tex + $(MAKE) $(AM_MAKEFLAGS) build-tex + $(MAKE) $(AM_MAKEFLAGS) ChkTeX.pdf + echo timestamp >$@ +build-tex: + cmp -s $(CHKTEX_TREE)/ChkTeX.tex $(srcdir)/ChkTeX.tex \ + || cp $(CHKTEX_TREE)/ChkTeX.tex $(srcdir)/ChkTeX.tex # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/Build/source/utils/chktex/configure b/Build/source/utils/chktex/configure index ba7c4762fbe..64fd69c7f2b 100755 --- a/Build/source/utils/chktex/configure +++ b/Build/source/utils/chktex/configure @@ -600,9 +600,11 @@ LTLIBOBJS LIBOBJS PERL5 CHKTEX_TREE +PDF_DEPEND EGREP GREP CPP +PDFLATEX LN_S WARNING_CFLAGS am__fastdepCC_FALSE @@ -3762,6 +3764,49 @@ else $as_echo "no, using $LN_S" >&6; } fi +for ac_prog in pdflatex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PDFLATEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PDFLATEX"; then + ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PDFLATEX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PDFLATEX=$ac_cv_prog_PDFLATEX +if test -n "$PDFLATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5 +$as_echo "$PDFLATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PDFLATEX" && break +done +test -n "$PDFLATEX" || PDFLATEX="no" + @@ -4504,6 +4549,9 @@ fi done +test "x$enable_maintainer_mode" = xyes && PDF_DEPEND=ChkTeX.tex + + ac_config_headers="$ac_config_headers config.h" @@ -4517,7 +4565,7 @@ PERL5='/usr/bin/env perl' ac_config_files="$ac_config_files Makefile" -ac_config_files="$ac_config_files ChkTeX.tex:chktex-1.6.4/ChkTeX.tex.in" +ac_config_files="$ac_config_files chktex-1.6.4/ChkTeX.tex" ac_config_files="$ac_config_files deweb.pl:chktex-1.6.4/deweb.in" @@ -5239,7 +5287,7 @@ do "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "ChkTeX.tex") CONFIG_FILES="$CONFIG_FILES ChkTeX.tex:chktex-1.6.4/ChkTeX.tex.in" ;; + "chktex-1.6.4/ChkTeX.tex") CONFIG_FILES="$CONFIG_FILES chktex-1.6.4/ChkTeX.tex" ;; "deweb.pl") CONFIG_FILES="$CONFIG_FILES deweb.pl:chktex-1.6.4/deweb.in" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; diff --git a/Build/source/utils/chktex/configure.ac b/Build/source/utils/chktex/configure.ac index bc039a8f9e6..4429a75789e 100644 --- a/Build/source/utils/chktex/configure.ac +++ b/Build/source/utils/chktex/configure.ac @@ -30,6 +30,7 @@ KPSE_COMPILER_WARNINGS dnl Checks for programs. AC_PROG_INSTALL AC_PROG_LN_S +AC_CHECK_PROGS([PDFLATEX], [pdflatex], [no]) dnl No termlib/termcap/ncurses library for TeX Live @@ -47,6 +48,10 @@ dnl Checks for library functions. AC_FUNC_VPRINTF AC_CHECK_FUNCS([access closedir fileno isatty opendir readdir stat strcasecmp strdup strlwr strtol]) +dnl Rebuild ChkTeX.pdf if required and amintainer-mode is enabled. +test "x$enable_maintainer_mode" = xyes && PDF_DEPEND=ChkTeX.tex +AC_SUBST([PDF_DEPEND]) + AC_CONFIG_HEADERS([config.h]) AC_DEFINE([TEX_LIVE], 1, [Define to 1 for a TeX Live build.]) @@ -54,7 +59,7 @@ AC_SUBST([CHKTEX_TREE], [chktex-]chktex_version) AC_SUBST([PERL5], ['/usr/bin/env perl']) AC_CONFIG_FILES([Makefile]) -AC_CONFIG_FILES([ChkTeX.tex:chktex-]chktex_version[/ChkTeX.tex.in]) +AC_CONFIG_FILES([chktex-]chktex_version[/ChkTeX.tex]) AC_CONFIG_FILES([deweb.pl:chktex-]chktex_version[/deweb.in], [chmod +x deweb.pl]) AC_OUTPUT |