summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nicefilelist
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/nicefilelist
Initial commit
Diffstat (limited to 'macros/latex/contrib/nicefilelist')
-rw-r--r--macros/latex/contrib/nicefilelist/README60
-rw-r--r--macros/latex/contrib/nicefilelist/doc/SrcFILEs.txt32
-rw-r--r--macros/latex/contrib/nicefilelist/doc/nicefilelist.RLS9
-rw-r--r--macros/latex/contrib/nicefilelist/doc/nicefilelist.pdfbin0 -> 647513 bytes
-rw-r--r--macros/latex/contrib/nicefilelist/docsrc/empty.f0
-rw-r--r--macros/latex/contrib/nicefilelist/docsrc/nicefilelist.tex388
-rw-r--r--macros/latex/contrib/nicefilelist/docsrc/provonly.fd4
-rw-r--r--macros/latex/contrib/nicefilelist/docsrc/srcfiles.tex34
-rw-r--r--macros/latex/contrib/nicefilelist/docsrc/wrong.prv1
-rw-r--r--macros/latex/contrib/nicefilelist/nicefilelist.sty356
10 files changed, 884 insertions, 0 deletions
diff --git a/macros/latex/contrib/nicefilelist/README b/macros/latex/contrib/nicefilelist/README
new file mode 100644
index 0000000000..6b2707e7bd
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/README
@@ -0,0 +1,60 @@
+
+ README for the `nicefilelist' package
+ \listfiles Alignment with Date and Version Columns
+ (C) Uwe Lueck 2012/10/30
+
+
+While `longnamefilelist.sty' improves LaTeX's \listfiles with
+respect to long base filenames only, the present `nicefilelist.sty'
+can keep separate columns for
+(i) date (ii) version, and (iii) "caption"
+(don't write caption text in date column),
+their alignment not being disturbed by short filename extensions
+such as `.fd'. This is achieved basing on the `monofill' package.
+
+v0.7 offers a package option `[wrap]' for automatic word wrapping
+within the caption column, using the `hardwrap' package, so
+filenames and captions can be quite long without disturbing the
+alignment.
+
+As opposed to the `dateiliste' package, this is about the plain
+text output in the `.log' file or, with `myfilist', as a stand-
+alone plain text file.
+
+The package `latexfileinfo-pkgs'
+
+ http://ctan.org/pkg/latexfileinfo-pkgs
+
+describes `nicefilelist' in a more general context. A file
+`nicefilelist.RLS' provides release information accessible by
+packages described there.
+
+
+LICENSE:
+
+The package file `nicefilelist.sty' and the documentation files
+`nicefilelist.pdf' and `nicefilelist.tex' can be redistributed and/or
+modified under the terms of the LaTeX Project Public License;
+either version 1.3c of the License, or any later version, see
+
+ http://www.latex-project.org/lppl.txt
+
+There is NO WARRANTY -- no responsibility can be accepted
+when your monitor bursts.
+
+The `nicefilelist' package is author-maintained in the sense of
+this license.
+
+The latest public version of the package is available at
+
+ http://mirror.ctan.org/macros/latex/contrib/nicefilelist/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/latex/contrib/nicefilelist.tds.zip
+
+Please report bugs, problems, suggestions, and bad English via
+
+ http://www.contact-ednotes.sty.de.vu
+
+
diff --git a/macros/latex/contrib/nicefilelist/doc/SrcFILEs.txt b/macros/latex/contrib/nicefilelist/doc/SrcFILEs.txt
new file mode 100644
index 0000000000..193b1ad9de
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/doc/SrcFILEs.txt
@@ -0,0 +1,32 @@
+
+ *File List*
+-----RELEASE.--- -- -- -- -- --
+nicefilelist.RLS 2012/12/12 v0.7a [wrap], `mono' typo, vs.
+-----PACKAGE.--- -- -- -- -- --
+nicefilelist.sty 2012/12/12 v0.7a more file list alignment (UL)
+------DOCSRC.--- -- -- -- -- --
+nicefilelist.tex 2012/12/12 -- documenting nicefilelist.sty
+ srcfiles.tex 2012/10/30 -- file infos -> SrcFILEs.txt
+--------DEMO.--- -- -- -- -- --
+ provonly.fd -- -- -- -- no date, no version, but a lot of info,
+ look how that is wrapped!
+ wrong.prv * NOT FOUND *
+ empty.f * NOT FOUND *
+--------USED.--- -- -- -- -- --
+ hardwrap.sty 2011/02/12 v0.2 Hard wrap messages
+ myfilist.sty 2012/11/22 v0.71 \listfiles -- mine only (UL)
+ readprov.sty 2012/11/22 v0.5 file infos without loading (UL)
+ fifinddo.sty 2012/11/17 v0.61 filtering TeX(t) files by TeX (UL)
+ makedoc.sty 2012/08/28 v0.52 TeX input from *.sty (UL)
+ niceverb.sty 2012/11/27 v0.51 minimize doc markup (UL)
+ texlinks.sty 2012/12/08 v0.71 TeX-related links (UL)
+ makedoc.cfg 2012/11/30 -- documentation settings
+ mdoccorr.cfg 2012/11/13 -- `makedoc' local typographical corrections
+-not-so-much.--- -- -- -- -- --
+ kvsetkeys.sty 2009/07/30 v1.5 Key value parser with default handler
+ support (HO)
+ ***********
+
+ List made at 2012/12/12, 23:52
+ from script file srcfiles.tex
+
diff --git a/macros/latex/contrib/nicefilelist/doc/nicefilelist.RLS b/macros/latex/contrib/nicefilelist/doc/nicefilelist.RLS
new file mode 100644
index 0000000000..42734de895
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/doc/nicefilelist.RLS
@@ -0,0 +1,9 @@
+\ProvidesFile{nicefilelist.RLS} %% RELEASE INFO
+ [{2012/12/12 v0.7a [wrap], `mono' typo, vs.}]
+ [{2012/10/30 r0.7 v0.7 [wrap] option}]
+ [{2012/10/11 r0.6 v0.6 \string\MaxBaseEmptyList*}]
+ [2012/10/01 r0.5 v0.5 \string\MaxBaseEmptyList]
+ [{2012/05/20 r0.4 v0.4 Kabelschacht + [r] }]
+ [2012/05/20 v0.3 Kabelschacht reimplementation]
+ [2012/03/29 v0.2 reimpl.: much within \string\typeout]
+ [2012/03/23 v0.1(a) initial]
diff --git a/macros/latex/contrib/nicefilelist/doc/nicefilelist.pdf b/macros/latex/contrib/nicefilelist/doc/nicefilelist.pdf
new file mode 100644
index 0000000000..ebf7a8743e
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/doc/nicefilelist.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicefilelist/docsrc/empty.f b/macros/latex/contrib/nicefilelist/docsrc/empty.f
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/docsrc/empty.f
diff --git a/macros/latex/contrib/nicefilelist/docsrc/nicefilelist.tex b/macros/latex/contrib/nicefilelist/docsrc/nicefilelist.tex
new file mode 100644
index 0000000000..8cb9643857
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/docsrc/nicefilelist.tex
@@ -0,0 +1,388 @@
+\ProvidesFile{nicefilelist.tex}[2012/12/12 documenting nicefilelist.sty]
+\title{\pkg{\huge nicefilelist.sty
+ }\\---\\\cs{listfiles} Alignment for Connoisseurs\thanks{This
+ document describes version
+ \textcolor{blue}{\UseVersionOf{\jobname.sty}}
+ of \pkg{\jobname.sty} as of \UseDateOf{\jobname.sty}.}}
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \MakeJobDoc{18}%% 2012/10/30
+ {\SectionLevelTwoParseInput} }
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+\input{makedoc.cfg} %% shared formatting settings
+\usepackage[wrap]{nicefilelist} \listfiles
+%% <- 2012/10/30 try without 'myfilist'
+\MDkeywords{Package management, document management, plain text output}
+\sloppy
+\begin{document}
+\maketitle
+\begin{MDabstract}
+While \CtanPkgRef{longnamefilelist}{longnamefilelist.sty}
+improves \LaTeX's \cs{listfiles} with respect to long base filenames only,
+'nicefilelist.sty' can keep separate columns for
+(i)~date, (ii)~version, and (iii)~``caption" %% 1st , 2012/10/30
+(don't write caption text in date column),
+their alignment not being disturbed by short filename extensions such as `.fd'.
+This is achieved basing on the \ctanpkgref{monofill} package.
+
+% Thus 'nicefilelist' is more ``powerful" than 'longnamefilelist',
+% the former however is an ``extension" of the latter
+% neither with respect to implementation nor with respect to user interface.
+
+%% <- 2012/10/29 ->
+v0.7 offers a package option `[wrap]' for automatic word wrapping within
+the caption column (using the \ctanpkgref{hardwrap} package),
+so filenames and captions can be quite long without disturbing alignment.
+
+As opposed to the \ctanpkgref{dateiliste} package, this is about the
+\meta{plain text} output in the `.log' file or, with \ctanpkgref{myfilist},
+as a stand-alone plain text file.
+
+\MDaddtoabstract{Related packages:} Cf.~\ctanpkgref{latexfileinfo-pkgs}.
+\end{MDabstract}
+\tableofcontents
+\section{Features and Usage}
+% We are describing relations to, ahm, related packages---rather brief{}ly.
+% The \ctanpkgref{latexfileinfo-pkgs} package provides a more general overview.
+% %% <- 2012/05/18
+%% 2012/10/29:
+Additionally or also ``complementarily" to the presentation given here,
+the functionality of the package is summarized in the file
+`latexfileinfo_pkgs.htm' from the \ctanpkgref{latexfileinfo-pkgs},
+in a comparison with packages resembling 'nicefilelist' in
+certain respects.
+
+\subsection{Relation to 'longnamefilelist.sty'}
+\CtanPkgRef{longnamefilelist}{longnamefilelist.sty} equips
+\cs{listfiles} with an optional argument for the maximum number of characters
+in the base filename. By contrast, 'nicefilelist' does not provide
+arguments for \cs{listfiles}, rather column widths for basename, extension,
+and version number are determined by \emph{templates} using
+\CtanPkgRef{monofill}{monofill.sty}. As a ``template" for doing this,
+see the initial settings in Sec.~\ref{sec:templates}.
+(Such settings must precede the \cs{listfiles command})
+So 'nicefilelist''s \emph{user interface} (at present) does not \emph{extend}
+'longnamefilelist''s user interface.
+
+Using 'monofill' is a very different approach than the one of 'longnamefilelist'.
+'nicefilelist' is more powerful than 'longnamefilelist', but is not based on it
+in any way. It does not make sense to load both packages, they just overwrite
+each other's behaviour of \cs{listfiles}.
+
+'longnamefilelist' may become ``obsolete" by the present package,
+unless one finds that its version of \cs{listfiles} looks fine enough
+and it is easier to understand and to use than 'nicefilelist'.
+
+\subsection{Installing}
+The file 'nicefilelist.sty' is provided ready, installation only requires
+putting it somewhere where \TeX\ finds it
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf}
+
+\subsection{Calling}
+%% restructured for v0.7 2012/10/29:
+Below the `\documentclass' line(s) and above `\begin{document}',
+you load 'nicefilelist.sty' (as usually) by
+\[`\usepackage{nicefilelist}'\]
+or by
+\[`\usepackage[<options>]{nicefilelist}'\]
+where <options> may be `r', `wrap', or `r,wrap'~\dots---see
+summaries in sections~\ref{sec:set} and \ref{sec:opt}
+on the package options and an example in Section~\ref{sec:short}.
+Alternatively---e.g., for use with \ctanpkgref{myfilist} from the
+\ctanpkgref{fileinfo} bundle (in a ``\TeX~script"), see Section~\ref{sec:myfilist},
+or in order to include the `.cls' file in the list---you may load it by
+\[`\RequirePackage{nicefilelist}'\]
+or by
+\[`\RequirePackage[<options>]{nicefilelist}'\]
+before `\documentclass' or when you don't use `\documentclass'.
+
+\subsection{Choosing Settings} %% new 2012/10/29
+\label{sec:set}
+
+\subsubsection{The Columns, Their Widths, and Their ``Missing" Content}
+\label{sec:cols}
+
+\AddQuotes %% 2012/10/29
+
+The 'nicefilelist' package considers the listing from `\listfiles'
+a five-column table, the columns being (reserved for) \
+(i)~the base filename, \ (ii)~the filename extension, \
+(iii)~the date, \
+(iv)~the version (or with option `[r]': the release) number, and \
+(v)~the caption \ of a \LaTeX\ source file. The filename base column
+is right-adjusted, the other ones are left-adjusted.
+Date, version, and caption are made up from the <f-info> argument in
+\[|\Provides<f-type>{<f-base>.<f-ext>}[<f-info>|]\]
+where <f-type> is `Class', `Package', or `File'.
+
+The fixed usual format `YYYY/MM/DD' for the date is assumed;
+in fact, when <f-info> doesn't start according to this format,
+it is assumed that no date is given, and some ``missing''
+text will appear in the ``date" column, determined by a macro
+|\NFLnodate|. The version number
+(or ``string") must follow in format `v<digit>.<digits>',
+otherwise some ``missing" text appears in the ``version" column,
+determined by a macro |\NFLnoversion|.
+What remains is placed in the ``caption" column.
+|\NFLnotfound| determines an alternative filling
+in the case that <f-info> cannot be obtained.
+See the default settings for these ``failure" texts in
+Section~\ref{sec:fail}.
+
+The column widths for filename base and extension
+and the column width for version or release
+are determined using the \ctanpkgref{monofill} package.
+They have ``field identifiers" |f-base|, |f-ext|,
+and |f-version| respectively. The respective widths are
+determined by templates <longest> in
+\[|\MDfieldtemplate{<field-id>}{<longest>}|\]
+See Section~\ref{sec:templates} for the default settings.
+Probably only adjusting the width for \emph{base} filenames
+is required in real life, see the example in Section~\ref{sec:short}.
+
+The spaces between the columns are determined by macros
+|\NFLspaceI|, |\NFLspaceII|, and |\NFLspaceIII|,
+see Section~\ref{sec:templates} for the defaults.
+
+\DontAddQuotes %% 2012/10/29
+
+\subsubsection{The Caption Column}
+The width of the caption column (unfortunately) is determined by
+the stuff enumerated above and the width of the console output window or screen.
+With long filenames and long captions, the result may look poor.
+the \emph{characters} that don't fit into the line may continue
+at left end of the window or screen, disturbing the appearance
+of a ``table"---unless you use package option |[wrap]|.
+The latter requires the \ctanpkgref{hardwrap} package by
+Will Robertson and Kevin Godby
+(``\Wikienref{not invented here}"). This package tries to determine
+the screen width by some subtle tests, and until it finds something
+better, it assumes a width of 80 characters (I suppose).
+'hardwrap' does \wikienref{Word wrap}{\emph{word wrapping}},
+i.e., it doesn't just put \emph{characters} not fitting into the
+next line, but entire \emph{words}. Moreover, it allows inserting
+some ``newline sequence" before the first word that is too much,
+and we use this feature here to put the next word into the
+\emph{caption column} rather than at the beginning of the next line.
+(Details and implementation are in Section~\ref{sec:opt}.)
+
+If you are not happy with the column width that 'hardwrap'
+chooses, but want to assume your own width <max-line-chars>
+(e.g., your width, measured by your doctor, divided by the
+ width of one character),
+compute its difference <max-line-chars-minus-one> to 1
+(maybe by your electronic calculator, or an emulation, or
+ a Lua script, cf.~\ctanpkgref{lualatex-doc}, or by
+ \ctanpkgref{bigintcalc}), and enter
+the 'hardwrap' instruction
+\[|\setmaxprintline{<max-line-chars-minus-one>}|\]
+when 'hardwrap' or 'nicefilelist' have been loaded
+\emph{and} before the internal macro `\@dofilelist' is run
+(which happens at the end of the document or when
+ \ctanpkgref{myfilist}'s `\ListInfos' is issued, for instance).
+
+\subsection{Usage and Samples with 'myfilist.sty'}
+\label{sec:myfilist}
+\subsubsection{Basically}
+In order to get a reduced and/or rearranged list of file infos
+with the \ctanpkgref{myfilist} package,
+`nicefilelist.sty' must be loaded earlier than
+`myfilist.sty'. This is due to a kind of limitation of the latter,
+ it \emph{issues} `\listfiles' (\TODO).
+Therefore \cs{listfiles} must be modified earlier---or \emph{issued} earlier,
+in this case the \cs{listfiles} in `myfilist.sty' does nothing.
+The file `SrcFILEs.txt' accompanying the---first---distribution of
+'nicefilelist' %% corr., was `longname'; `first' etc. 2012/10/29
+was generated by running the following file `srcfiles.tex' with \LaTeX:
+\begin{quotation}\tt\small
+\expandafter\def\expandafter\{\expandafter{\string{}
+\expandafter\def\expandafter\}\expandafter{\string}}
+\obeyspaces\obeylines
+\cs{ProvidesFile}\{srcfiles.tex\}[2012/03/23
+ ~ file infos -\empty> SrcFILEs.txt]
+\cs{RequirePackage}\{nicefilelist\}
+\%\% INSERT MODIFICATIONS OF INITIAL
+\%\% \verb+`nicefilelist'/`monofill'+ SETTINGS HERE!
+\cs{RequirePackage}\{myfilist\}
+\%\% documentation:
+\cs{ReadFileInfos}\{nicefilelist\}
+\%\% demonstration:
+\cs{ReadFileInfos}\{provonly.fd,wrong.prv,empty.f\}
+\% \cs{ReadFileInfos}\{utopia.xyz\}
+\%\% present file:
+\cs{ReadFileInfos}\{nicefilelist\}
+\cs{ReadFileInfos}\{srcfiles\}
+\cs{ListInfos}[SrcFILEs.txt]
+\end{quotation}
+Note the lines where to place \strong{custom} modifications of settings
+for alignment (Section~\ref{sec:templates}) or failure displays
+(Section~\ref{sec:fail}).
+
+The previous code mentions the following files:
+\begin{description}
+ \item[`provonly.fd'] has a proper `\ProvidesFile' line without date,
+ for seeing what happens in the date and version columns.
+ It also was a test for the case that there are fewer
+ characters than a date has, and there is no blank space.
+ \item[`wrong.prv'] has a `\ProvidesFile' line with wrong file name.
+ \item[`empty.f'] just is an empty file.
+ \item[`utopia.xyz'] is not present at all, you get an error when you remove
+ the comment mark.
+\end{description}
+Moreover, my `.tex' files have dates, but not version numbers,
+so you see what happens then:
+\vskip\topsep
+\begin{small}\tt
+\obeyspaces\obeylines
+~ *File List*
+nicefilelist.sty 2012/03/23 v0.1 \rlap{more file list alignment (UL)}
+~ monofill.sty 2012/03/19 v0.1a monospace alignment (UL)
+~ myfilist.sty 2011/01/30 v0.3a \rlap{\cs{listfiles} -- mine only (UL)}
+~ readprov.sty 2010/11/27 v0.3 \rlap{file infos without loading (UL)}
+nicefilelist.tex 2012/03/23 -- \rlap{documenting nicefilelist.sty}
+~ provonly.fd -- -- -- -- such
+~ wrong.prv * NOT FOUND *
+~ empty.f * NOT FOUND *
+~ srcfiles.tex 2012/03/23 -- file infos -> SrcFILEs.txt
+~ ***********
+~
+~List made at 2012/03/23, 10:31
+~from script file srcfiles.tex
+\end{small}
+%% TODO update example!?
+%%
+\subsubsection{More Generally and Shorthand}
+\label{sec:short}
+
+\AddQuotes %% 2012/10/11
+
+In the above example, the 'myfilist' command `\EmptyFileList'
+was missing---it was not intended there. Usually however, %% is -> was 2012/10/29
+it \emph{is} intended, i.e., the following sequence of
+lines is wanted:
+\begin{quotation}\tt\small
+\expandafter\def\expandafter\{\expandafter{\string{}
+\expandafter\def\expandafter\}\expandafter{\string}}
+\obeyspaces\obeylines
+\cs{RequirePackage}[r]\{nicefilefilelist\}
+\cs{MFfieldtemplate}\{f-base\}[<longest-name>]
+\cs{RequirePackage}\{myfilist\}
+\cs{EmptyFileList}[<read-again-files>]
+\end{quotation}
+Here you also see usage of package option |[r]| for
+release numbers and the adjustment
+ \[|\MFfieldtemplate{f-base}{<longest-name>}|\]
+according to Section~\ref{sec:templates}.
+
+With v0.5, the last three code lines in the snippet above
+can be replaced by
+\[|\MaxBaseEmptyList{<longest-name>}[<read-again-files>]|\]
+---``optionally" without `[<read-again-files>]'.
+This may save the user from worrying about usage
+with 'myfilist'.
+
+\DontAddQuotes
+
+'nicefilelist' formats file lists nicely
+even when base filenames have eight characters at most,
+what \LaTeX's original `\listfiles' was made for.
+v0.6 simplifies this case by a star version of `\MaxBaseEmptyList':
+\pagebreak[2]
+\[|\MaxBaseEmptyList*|\]
+works like `\MaxBaseEmptyList{nicefile}' (eight characters)---still,
+optional `[<read-again-files>]' may follow. This feature is demonstrated
+with \ctanpkgref{inputtrc} v/r0.3.
+
+\subsubsection{Sample with Wrapped Caption Column} %% 2012/10/30
+
+\AddQuotes
+
+The most recent version of the accompanying `SrcFILEs.txt' contains
+the following:
+\bigskip
+\begingroup \footnotesize
+\hrule
+\verbatiminput{SrcFILEs.txt}
+\hrule
+\endgroup
+\bigskip
+
+This exemplifies
+\begin{enumerate}
+ \item \strong{wrapping} of `provonly.fd''s and \ctanpkgref{kvsetkeys}\file{.sty}
+ file info within the \strong{caption} column
+ using 'nicefilelist''s `[wrap]' option,
+ \item inserted ``\strong{comments}" from \ctanpkgref{myfilist}'s `\FileListRemark',
+ \item a file `nicefilelist.RLS' for a \strong{release summary}. This is to track
+ what has happened most recently, whether the most recent release
+ has been installed (system-wide), or (for me) whether most recent versions
+ of package and documentation have been released.
+ When such an `.RLS' file is installed together with packages
+ in the `tex' subtree of a \acro{TDS}, the release summary can be
+ accessed quickly as a \strong{terminal display}
+ by one of the packages \ctanpkgref{ltxfileinfo},
+ \ctanpkgref{latexfileversion}, or \ctanpkgref{typeoutfileinfo}.
+ One aim of the `[wrap]' option is allowing longer ``release captions"
+ (looking fine in the package file list) than fit into a small part
+ of a single line.
+\end{enumerate}
+%
+The above `SrcFILEs.txt' has been generated from the following version
+of the \TeX\ script `srcfiles.tex':
+\bigskip
+\hrule
+\verbatiminput{srcfiles.tex}
+\smallskip
+\hrule
+
+\DontAddQuotes
+
+\section{Implementation}
+\subsection{Package File Header (Legalese)}
+\input{nicefilelist.doc}
+
+% \pagebreak %% 2012/09/30 rm. 2012/10/29
+\section{Credits}
+\begin{enumerate} %% 2012/05/20
+ \item It was \ctanpkgauref{muench-hm}{\textsc{Martin M\"unch}}
+ who pointed out the shortcomings
+ of 'longnamefilelist' that the present package addresses---thanks!
+ %% 2012/05/20:
+ \item For \textsc{Alois Kabelschacht}---whose idea in
+ TUGboat~\textbf{8}~\#2\footnote{\tugbartref{tb08-2/tb18kabel}{%
+ ``&\expandafter\ vs.\ %% .\ 2012/12/12
+ &\let\ and &\def\ in Conditionals
+ and a Generalization of PLAIN's &\loop,"}
+ TUGboat Vol.~8 (1987), No.~2, pp.~184f.
+ (\urlhttpref{tug.org/TUGboat/tb08-2/tb18kabel.pdf})}
+ is used for v0.3---cf.\ the \ctanpkgref{dowith} documentation.
+\end{enumerate}
+
+\section{Missing}
+% \begin{enumerate} %% rm. 2012/10/29
+% \item
+ The package once might provide \ctanpkgref{keyval}-style
+ optional arguments for \cs{listfiles} or even call \cs{listfiles}
+ automatically with 'keyval' package options.
+% %% 2012/05/18:
+% \item Another idea from \textsc{Martin Muench}: wrapping inside caption column.
+% Can \ctanpkgref{hardwrap} help?
+% \end{enumerate}
+
+\end{document}
+
+VERSION HISTORY
+
+2012/03/20 for v0.1 started
+2012/03/22 trying something
+2012/03/23 for v0.1a without "aligning the dots" etc.
+2012/05/18 for v0.30 Legalize -> Legalese; add. TODO "wrapping";
+ ref. to `latexfileinfo-pkgs'
+2012/05/20 for v0.31 mention Kabelschacht
+2012/05/20 for v0.4 on new package option [r]
+2012/09/30 for v0.5 \MaxBaseEmptyList, doc. \pagebreak
+2012/10/11 for v0.6 \MaxBaseEmptyList*, \AddQuotes
+2012/10/29 for v0.7 "Mnch", one item less missing, MDabstract,
+ usage restructured and extended
+2012/10/30 \listfiles
+2012/12/12 for v0.7a vs.\
diff --git a/macros/latex/contrib/nicefilelist/docsrc/provonly.fd b/macros/latex/contrib/nicefilelist/docsrc/provonly.fd
new file mode 100644
index 0000000000..52aa2c3604
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/docsrc/provonly.fd
@@ -0,0 +1,4 @@
+%\ProvidesFile{provonly.fd}[2012/03/22 v0.11a such]
+%\ProvidesFile{provonly.fd}[such]
+\ProvidesFile{provonly.fd}[no date, no version, but a lot of info,
+ look how that is wrapped!]
diff --git a/macros/latex/contrib/nicefilelist/docsrc/srcfiles.tex b/macros/latex/contrib/nicefilelist/docsrc/srcfiles.tex
new file mode 100644
index 0000000000..795e982e7d
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/docsrc/srcfiles.tex
@@ -0,0 +1,34 @@
+\ProvidesFile{srcfiles.tex}
+ [2012/10/30 file infos -> SrcFILEs.txt]
+\RequirePackage[r,wrap]{nicefilelist}
+\RequirePackage{filedate}
+\MaxBaseEmptyList{nicefilelist}
+ [nicefilelist.sty,%
+ readprov.sty,myfilist.sty,%
+ hardwrap.sty]
+\FileListRemark[ -- ]{-----RELEASE.---}
+\ReadFileInfos{nicefilelist.RLS}
+\FileListRemark[ -- ]{-----PACKAGE.---}
+\ReadPackageInfos{nicefilelist}
+\FileListRemark[ -- ]{------DOCSRC.---}
+\ReadFileInfos{nicefilelist,srcfiles.tex}
+\FileListRemark[ -- ]{--------DEMO.---}
+\ReadFileInfos{provonly.fd,wrong.prv,empty.f}
+%\ReadFileInfos{utopia.xxx}
+%\FileListRemark[ -- ]{DOCUTILITIES.---}
+%\FileListRemark[ -- ]{usedNICETEXT.---}
+\FileListRemark[ -- ]{--------USED.---}
+\ReadPackageInfos{hardwrap,
+ myfilist,readprov,
+ fifinddo,makedoc,niceverb,texlinks}
+\ReadFileInfos{makedoc.cfg,mdoccorr.cfg}
+\FileListRemark[ -- ]{-not-so-much.---}
+\ReadPackageInfos{kvsetkeys}
+%\NoStopListInfos[SrcFILEs.txt]
+%\EqualityMessages
+\CheckDateOfPDFmod{nicefilelist.sty}
+\CheckDateOfPDFmod{nicefilelist.tex}
+\CheckDateOfPDFmod{nicefilelist.RLS}
+\CheckDateOfPDFmod{srcfiles.tex}
+%\stop
+\NoBottomLines \ListInfos[SrcFILEs.txt]
diff --git a/macros/latex/contrib/nicefilelist/docsrc/wrong.prv b/macros/latex/contrib/nicefilelist/docsrc/wrong.prv
new file mode 100644
index 0000000000..166454f5c8
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/docsrc/wrong.prv
@@ -0,0 +1 @@
+\ProvidesFile{diffname.prv}[2012/03/23 v0.1 wrong]
diff --git a/macros/latex/contrib/nicefilelist/nicefilelist.sty b/macros/latex/contrib/nicefilelist/nicefilelist.sty
new file mode 100644
index 0000000000..87d66f4886
--- /dev/null
+++ b/macros/latex/contrib/nicefilelist/nicefilelist.sty
@@ -0,0 +1,356 @@
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{nicefilelist}[2012/12/12 v0.7a
+ more file list alignment (UL)]
+%% Copyright (C) 2012 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% === Alignment Settings ===
+%% \label{sec:templates}
+%% We use the \ctanpkgref{monofill} package for alignment of plain text:
+\RequirePackage{monofill}[2012/10/29]
+%% See its documentation for details.
+%% %% <- added 2012/10/29 ->
+%% The `[wrap]' option provided by 'nicefilelist' v0.7 requires
+%% 'monofill' v0.2 as of 2012-10-29.
+%%
+%% We support three alignment ``fields" according to the terminology of \pkg{monofill}.
+%% Their ids are |f-base| for base filenames, |f-ext| for filename extensions,
+%% % |f-date| for the revision date,
+%% and |f-version| for the revision version id of a file %%% ,
+%% % the latter two
+%% as read from `\ProvidesFile', `\ProvidesPackage',
+%% or `\ProvidesClass' command in the file.
+%% Initial settings for them are following.
+%% For modifying them, load 'nicefilelist.sty',
+%% then type your own settings, then issue `\listfiles'
+%% or load 'myfilist.sty'.
+\MFfieldtemplate{f-base}{nicefilelist}
+\MFfieldtemplate{f-ext}{tex}
+\MFfieldtemplate{f-version}{v0.11a}
+%% We are not supporting version numbers greater than 9 at present---sorry! (TODO)
+%%
+%% |\NFLspaceI|, |\NFLspaceII|, and |\NFLspaceIII|
+%% determine the space between the four
+%% columns for names, dates, versions, and ``captions":
+\newcommand*{\NFLspaceI} { \space}
+\newcommand*{\NFLspaceII} { \space}
+\newcommand*{\NFLspaceIII}{ }
+%%
+%% === Failure Displays ===
+%% \label{sec:fail} %% was failure 2012/10/29
+%% |\NFLnodate| is displayed in place of a file date if it seems
+%% not to be given (configurable):
+\newcommand*{\NFLnodate}{ -- \space-- --}
+%% |\NFLnoversion| likewise---however, for alignment,
+%% each wanted space must be specified as `\space'
+%% (not just a code blank space).
+%% It may need adjustment (by `\renewcommand') when
+%% `\MFfieldtemplate{f-version}' is modified:
+\newcommand*{\NFLnoversion}{\space--}
+%% |\NFLnotfound| is for files with wrong or no
+%% \cs{Provides.\empty..} command:
+\newcommand*{\NFLnotfound}{ * NOT FOUND *}
+%%
+%% === Package Options ===
+%% \label{sec:opt}
+%% v0.4 offers package option |[r]| that allows strings with `r' %% |...| 2012/10/30
+%% in place of `v', for ``release." `\NFL@v@digit''s definition
+%% therefore depends ... we use |\@listfiles| for a ``message"
+%% there. For the original restricted functionality, it expands
+%% to |\NFL@false|.
+\def\@listfiles{\noexpand\NFL@false}
+%% Package option `[r]' carries out another test instead.
+%% See the accompanying file `SrcFILEs.txt' to see the effect.
+%% TODO: update example!?
+\DeclareOption{r}{%
+ \def\@listfiles{%
+ {\noexpand\NFL@ifx@kbl##1r%
+ {\noexpand\NFL@digits##2\noexpand\@nnil}%
+ \noexpand\NFL@false}%
+ }%
+}
+%% v0.7 offers package option |[wrap]| for automatical wrapping within %% |...| 2012/10/30
+%% the "captions" column, based on Will Robertson's and Kevin Godby's
+%% \ctanpkgref{hardwrap} package. The difference between this option
+%% and the functionality without is controlled by the macro
+%% `\NFL@filerow'.
+%% %% 2012/10/30:
+%% \emph{Without} it expands to `\typeout'
+\newcommand*{\NFL@filerow}{\typeout}
+%% ---`\let' does'nt work with 'myfilist''s redefinition of
+%% `\typeout'.
+%% \emph{With} `[wrap]', `\NFL@filerow' applies 'hardwrap''s
+%% `\HardWrap':
+\DeclareOption{wrap}{%
+ \renewcommand*{\NFL@filerow}[1]{%
+ \HardWrap\typeout\hw@maxprintline\relax{^^J%
+ \MFrightinfield\space{f-base} %
+ \MFleftinfield \space{f-ext}%
+ \NFLspaceI\@spaces\space\@spaces\space \NFLspaceII
+ \MFrightinfield\space{f-version}\NFLspaceIII}{%
+ #1}}%
+%% Alignment of filenames with 'hardwrap' seems to need
+ \renewcommand*{\MFfillelement}{\MFotherspace}
+%% from \ctanpkgref{monofill} v0.2. %% was `monospace' 2012/12/12
+}
+%% The display width is controlled by 'hardwrap''s counter
+%% `\hw@maxprintline'. Unless 'hardwrap' finds something special,
+%% its content is 79, corresponding to a display width of
+%% 80 characters (I believe---counting the leftmost character
+%% as \qtd{0}, as editors like to do). You can choose a different
+%% content value <max-char-col> by 'hardwrap''s
+%% \[|\setmaxprintline{<max-char-col>}|\]
+\ProcessOptions
+%% The next `\ifx' is to check whether `[wrap]' has been demanded
+%% and 'hardwrap' is needed:
+\ifx\NFL@filerow\typeout \else
+ \RequirePackage{hardwrap}
+\fi
+%%
+%% === Safe Tests === %% below options 2012/10/29
+%% \label{sec:safe}
+%% For fairly safe tests, we brief{}ly use an exotic version of `Q'
+%% (similarly to \ctanpkgref{ifmptarg} and \ctanpkgref{url}):
+\catcode`\Q=7 \let\NFL@criterion=Q \catcode`\Q=11
+%% %% 2012/03/27:
+%% It appears to me that expandable tests like the ones employed here
+%% never are perfectly safe; you only can say that it is safe with a
+%% source meeting certain conditions. \ctanpkgref{fifinddo} originally
+%% was made for ``plain text," to be read from files without assigning
+%% \TeX's special category codes. \emph{Here} we assume that the source
+%% (text in \cs{Provides.\empty..} arguments) will never contain such a
+%% ``funny `Q'".
+%%
+%% === Redefining \cs{listfiles} ===
+%% Similarly to original \LaTeX, |\listfiles| carries almost everything
+%% that is needed for the file list only. 2012-10-29: little point
+%% in this, perhaps, in that the package should be loaded when
+%% running `\listfiles' is intended---TODO. Or maybe it is loaded
+%% \emph{just in case?}
+\renewcommand*{\listfiles}{%
+ \let\listfiles\relax
+%% ---this clears memory. Now \LaTeX\ doesn't collect file names for
+%% &\listfiles when &\@listfiles is undefined, therefore
+% \let\@listfiles\relax
+%% % although we don't use it.
+%% % (TODO use it in place of some `\NFL@'...?)
+%% ... postponed for v0.4 ...
+%% \vskip\smallskipamount\noindent
+%% |\@dofilelist| is executed by the standard \LaTeX\ `\enddocument'
+%% macro or by `\ListInfos' from the \ctanpkgref{myfilist} package.
+ \def\@dofilelist{%
+%% ``Title:"
+ \typeout{^^J %% trick 2012/03/29 vv
+ \MFrightinfield{*File Lis}{f-base}t*}%
+ \@for\@currname:=\@filelist\do{%
+%% This starts the loop through the list of files
+ \filename@parse\@currname
+ \edef\filename@ext{%
+ \ifx\filename@ext\relax tex\else\filename@ext\fi}%
+%% Like \LaTeX's &\reserved@b:
+ \expandafter\let\expandafter\@tempb
+ \csname ver@\filename@base.\filename@ext\endcsname
+%% According to `source2e.pdf', &\filename@area may be a directory.
+%% Trying support of this is seems to be a new feature with v0.2---not
+%% tested, TODO!
+ \edef\@tempa{\filename@area\filename@base}%
+%% Actually I would like to be able to do even the filename parsing
+%% expandably---for all systems, `texsys.cfg'!?? TODO
+ \NFL@filerow{%
+%% Now all parsing and checking must be expandable.
+ \NFL@make@macro@arg\MFrightinfield\@tempa {f-base}.%
+ \NFL@make@macro@arg\MFleftinfield \filename@ext{f-ext}%
+ \NFLspaceI
+ \NFL@ifx@kbl\@tempb\relax\NFLnotfound{%
+ \NFL@make@macro@arg\NFL@space@split\@tempb
+ \NFL@maybe@three
+ \NFL@date@or@rest
+ }%
+ }%
+ }%
+%% The line of stars:
+ \typeout{ %% trick vvv 2012/03/29
+ \MFrightinfield{********}{f-base}***^^J}%
+%% TODO or more stars as with 'longnamefilelist'?
+ }%
+%% This finishes the definition of `\@dofilelist'.
+%% % The definitions of macros called from `\@dofilelist' are following.
+%% \[|\NFL@make@macro@arg<cmd-1><cmd-2>|\] results in
+%% `<cmd-1>{<t-list>}' where <t-list> is the one-step expansion of
+%% <cmd-2>:
+ \def\NFL@make@macro@arg##1##2{\expandafter##1\expandafter{##2}}%
+%% |\NFL@space@split{<token-list>}{<spaced>}{<unspaced>}|
+%% passes prefix and suffix as arguments to <spaced>
+%% if a space token is within <token-list>, otherwise
+%% <unspaced> gets the original <token-list> as single
+%% argument. The latter is useful here where <token-list>
+%% becomes visible only by an &\expandafter.
+%% The following construction is discussed more generally
+%% in the \ctanpkgref{bitelist} package.
+ \def\NFL@space@split##1{%
+ \NFL@return@space@split##1\@nil: \NFL@criterion\@nil\@nil@{##1}}%
+%% `\NFL@return@spaces@split' essentially has \emph{three} parameters
+%% delimited by ` ', `\@nil', and `\@nil' again.
+ \def\NFL@return@space@split##1 ##2\@nil##3\@nil@##4##5##6{%
+ \NFL@ifx@kbl\NFL@criterion{##2}%
+%% If #2 is empty, `\NFL@ifx@kbl' (as of v0.3) compares
+%% `\NFL@criterion' (criterion indicating ``unspaced") with
+%% `\expandafter'. This only happens when the space is the last thing
+%% in <token-list>, and `<spaced>' is chosen correctly.
+ {##6{##4}}{##5{##1}{##2}}}%
+%% |\NFL@ifx@kbl{<token>}{<maybe-token>}{<ifx>}{<unlessx>}|
+%% as of v0.3 should save some tokens, in some longer run,
+%% especially if we want to add nestings---cf. \file{source2e.pdf}
+%% for ``Kabelschacht."
+ \def\NFL@ifx@kbl##1##2{%
+ \ifx##1##2\expandafter \@firstoftwo
+ \else \expandafter \@secondoftwo \fi}%
+%% Dealing with |\NFL@date@or@rest{<token-list>}| before `\NFL@maybe@three':
+ \def\NFL@date@or@rest##1{%
+ \NFL@if@date{##1}{##1}{\NFL@no@date@version##1}}%
+%% |\NFL@if@date{<token-list>}{<yes>}{<no>}| ...
+ \def\NFL@if@date##1{\NFL@slashes##1\NFL@xi xyzxyzxyzx\@nil}%
+%% |\NFL@slashes| checks that there are slashes at the expected places:
+ \def\NFL@slashes##1##2##3##4##5##6##7##8{%
+ \NFL@ifx@kbl##5/%
+ {\NFL@ifx@kbl##8/\NFL@ten@only\NFL@false}%
+ \NFL@false
+%% This especially happens when <token-list> is empty.
+%% Digit candidates back:
+ {##1##2##3##4##6##7}}%
+%% If the word is a date, we now have taken 6 of the 8 digits.
+%% \[|\NFL@ten@only{<digits>}<digit><digit>Q|\]
+%% takes the two remaining and then a thing that should be `Q'
+%% in the funny sense of Sec.~\ref{sec:safe}.
+ \def\NFL@ten@only##1##2##3##4{%
+ \NFL@ifx@kbl\NFL@xi##4\NFL@digits\NFL@false
+%% Finally checking digits:
+ ##1##2##3\@nnil}%
+%% |\NFL@digits<token>| is a loop through single tokens:
+ \def\NFL@digits##1{%
+ \NFL@ifx@kbl##1\@nnil\NFL@true{%
+ \NFL@if@digit@code##1<0\NFL@false{%
+ \NFL@if@digit@code##1>9\NFL@false\NFL@digits
+ }%
+ }%
+ }%
+%% |\NFL@if@digit@code<char-1><relation><char-2><fits><bad>|:
+ \def\NFL@if@digit@code##1##2##3{%
+ \ifnum`##1##2`##3 \expandafter \@firstoftwo
+ \else \expandafter \@secondoftwo \fi}%
+%% |\NFL@false| skips further candidates and dummies and chooses <no>:
+ \def\NFL@false##1\@nil{\@secondoftwo}%
+%% |\NFL@true| skips further candidates and dummies and chooses <yes>:
+ \def\NFL@true##1\@nil{\@firstoftwo}%
+%% We don't support version without date, therefore run
+%% |\NFL@no@date@version| as soon as we find that the file info
+%% does not start with a date:
+ \def\NFL@no@date@version{%
+ \NFLnodate\NFLspaceII\NFLnoversion@\NFLspaceIII}%
+%% |\NFLnoversion@| adds filler to &\NFLnoversion:
+ \def\NFLnoversion@{%
+ \NFL@make@macro@arg\NFL@place@version\NFLnoversion}%
+%% |\NFL@maybe@three{<word-1>}{<rest>}| looks whether <word-1>
+%% is a date. If it is, it is written to screen, and then we look
+%% if <rest> contains a version id. Otherwise ```<word-1>_<rest>'"
+%% is considered a ``caption" only.
+ \def\NFL@maybe@three##1##2{%
+ \NFL@if@date{##1}%
+ {##1\NFLspaceII
+ \NFL@space@split{##2}%
+ \NFL@maybe@version@rest
+ \NFL@version@or@rest}%
+ {\NFL@no@date@version##1 ##2}}%
+%% |\NFL@version@or@rest{<token-list>}|:
+ \def\NFL@version@or@rest##1{%
+ \NFL@if@version{##1}%
+ {\NFL@place@version{##1}}%
+ {\NFLnoversion@\NFLspaceIII##1}}%
+%% |\NFL@if@version{<token-list>}{<yes>}{<no>}|:
+ \def\NFL@if@version##1{\NFL@v@digit##1xy\@nil}%
+%% TODO: At applications you see how some tokens could be saved.
+%% On the other hand, the macros are more transparent in the
+%% present way.
+%% \vskip\smallskipamount\noindent
+%% |\NFL@v@digit{<t1>}{<t2>}{<rest>}| checks whether the first thing
+%% is a `v' and the second a digit---unless package option `[r]'
+%% was chosen. v0.4 uses `\edef' for choosing:
+ \edef\NFL@v@digit##1##2##3\@nil{%
+ \noexpand\NFL@ifx@kbl##1v%
+ {\noexpand\NFL@digits##2\noexpand\@nnil}%
+%% |\@listfiles| will either expand to the original `\NFL@false'
+%% or to a test on `r':
+ \@listfiles
+ \noexpand\@nil}%
+ \let\@listfiles\relax
+%% |\NFL@place@version{<token-list>}| adds filler to version id:
+ \def\NFL@place@version##1{\MFleftinfield{##1}{f-version}}%
+%% |\NFL@maybe@version@rest{<list-1>}{<list-2>}|:
+ \def\NFL@maybe@version@rest##1##2{%
+ \NFL@if@version{##1}%
+ {\NFL@place@version{##1}\NFLspaceIII##2}%
+ {\NFLnoversion@\NFLspaceIII##1 ##2}}%
+}
+%% === Shorthand for 'myfilist' ===
+%% \[|\MaxBaseEmptyList{<longest-name>}[<read-again-files>]|\]
+%% (v0.5) or
+%% \[|\MaxBaseEmptyList*[<read-again-files>]|\]
+%% (v0.6) as described in Section~\ref{sec:short}:
+\newcommand*{\MaxBaseEmptyList}{%
+ \@ifstar{\maxBaseEmptyList{abcdabcd}}\maxBaseEmptyList}
+\newcommand*{\maxBaseEmptyList}[1]{%
+ \MFfieldtemplate{f-base}{#1}%
+ \RequirePackage{myfilist}\EmptyFileList}
+%% So |\maxBaseEmptyList| is like former `\MaxBaseEmptyList'
+%% without expecting a star---available to users.
+%%
+%% === Leaving the Package File ===
+\endinput
+%%
+%% === VERSION HISTORY ===
+
+v0.1 2012/03/20 started
+ 2012/03/22 almost ready
+ 2012/03/23 debugging; \NFLspaceI etc.;
+ documentation completed
+
+v0.2 2012/03/24 file info processed by \typeout - start
+ 2012/03/25 trying, debugging
+ 2012/03/26 continued; \NFL@place@version, \NFLnoversion@;
+ works, reordered; another fix about Q -> \@empty
+ 2012/03/27 undone the latter, explained; improved remarks on
+ \@listfiles
+ 2012/03/29 alignment of title/stars with base<11
+
+v0.30 2012/05/18f. \NFL@ifx@kbl in \NFL@return@space@split
+ 2012/05/20 all \ifx reimplemented, old code kept
+ STORED INTERNALLY
+v0.31 2012/05/20 removing old code - STORED INTERNALLY
+v0.32 2012/05/20 removing \NFL@xpxpxp; replacing \NFL@after@false
+ by \NFL@ifnum@kbl, keeping old code
+ STORED INTERNALLY
+v0.33 2012/05/20 removing old code; added 3 %s
+ STORED INTERNALLY
+v0.4 2012/05/20 option [r]
+v0.5 2012/09/30 \MaxBaseEmptyList
+v0.6 2012/10/03 \MaxBaseEmptyLists first arg. only optional
+ 2012/10/11 ... bad with 2nd opt. arg., *
+v0.7 2012/10/13 "updating" date in \Provides...!
+ 2012/10/28 \HardWrap first try
+ 2012/10/29 \HardWrap newline material -> [wrap]
+ sec:test below sec:opt, mentioning `url'
+ 2012/10/30 correcting \NFL@filerow without wrapping,
+ doc.: |...| in sec:opt
+v0.7a 2012/12/12 doc. monospace -> monofill