\NeedsTeXFormat{LaTeX2e}[1994/12/01] \ProvidesPackage{longnamefilelist}[2012/09/30 v0.2 list files with long names (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 %% %% == Usage with 'myfilist' == %% \label{sec:myfilist} %% === Basically === %% \label{sec:basic} %% In order to get a reduced and/or rearranged list of used files %% with the \ctanpkgref{myfilist} package, %% `longnamefilelist.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 `\listfiles' must be modified earlier---or \emph{issued} earlier, %% in this case the `\listfiles' in `myfilist.sty' does nothing. %% The file `SrcFILEs.txt' accompanying the distribution of 'longnamefilelist', %% e.g., can be generated by running the following file `srcfiles.tex' %% with \LaTeX: %% %% v0.1b 2012/03/14 avoid right-arrow substitution TODO: %% \begin{quotation}\tt\small %% \expandafter\def\expandafter\{\expandafter{\string{} %% \expandafter\def\expandafter\}\expandafter{\string}} %% \obeyspaces\obeylines %% \cs{ProvidesFile}\{srcfiles.tex\}[2012/03/12 %% ~ file infos -\empty> SrcFILEs.txt] %% \cs{RequirePackage}\{longnamefilelist\} %% \cs{listfiles}[16] %% \cs{RequirePackage}\{myfilist\} %% \%\% documentation: %% \cs{ReadFileInfos}\{longnamefilelist\} %% \%\% documentation settings and auxiliaries: %% \cs{ReadPackageInfos}\{fifinddo,makedoc,niceverb\} %% \cs{ReadFileInfos}\{makedoc.cfg,mdoccorr.cfg,srcfiles\} %% \cs{ListInfos}[SrcFILEs.txt] %% \end{quotation} %% %% === Shorthand === %% \label{sec:short} %% In the above example, the 'myfilist' command `\EmptyFileList' %% is missing---it is not intended there. Usually however, %% 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}\{longnamefilelist\} %% \cs{listfiles}[] %% \cs{RequirePackage}\{myfilist\} %% \cs{EmptyFileList}[] %% \end{quotation} %% With v0.2, the last three lines can be replaced by %% \[|\MaxLengthEmptyList{}[|]\] %% ---``optionally" without \qtd{`[]'}. %% This may save the user from worrying about usage %% with 'myfilist'. %% %% == \cs{listfiles} extended == %% \label{sec:list} %% |\listfiles[]| ``orders" a final list of files %% with infos and optimizes the list's alignment %% (in plain text output) when the longest base filename %% consists of characters: \renewcommand*{\listfiles}[1][\LNFL@chars@set]{% %% The default parameter `\LNFL@chars@set' is defined in Sec.~\ref{sec:set}. \let\listfiles\relax \def\LNFL@chars{#1}% %% This stores the actual parameter. It is used several times: %% for preparing the alignment and the final line of stars here %% and then for aligning each list entry by `\@listfiles' %% from `\@dofilelist'. %% %% \LaTeX's `\@dofilelist' appends a list of ``dummy" tokens `\\' %% to each filename before `\@listfiles' is run on the filename. %% \LaTeX's `\@listfiles' is run 8 times, and there are 8 dummies. %% Dummies not looked at by `\@listfiles' are removed by some %% ``killing" macro using a token that delimits the dummy list. %% We use `\relax' tokens as dummies instead. They need not to be removed. %% And we append dummies. They are stored in a macro `\LNFL@dummies': \let\LNFL@dummies\@empty %% `\LNFL@spaces' is used to align the list title ``*file list*" %% flushleft with the filenames: \def\LNFL@spaces{ }% %% We also use more stars than \LaTeX\ below the list. %% space 2012/03/15 %% (However, all of this can also be used for \emph{shorter} names %% with \emph{less} stars below.) \def\LNFL@stars{***}% \count@\LNFL@chars\relax %% This initializes the loop for adding dummies, title spaces, %% and stars below the list. \@whilenum\count@>\z@\do{% \edef \LNFL@dummies{\LNFL@dummies\relax}% \ifnum8<\count@ \edef \LNFL@spaces { \LNFL@spaces}% \fi \edef \LNFL@stars {*\LNFL@stars}% \advance\count@\m@ne }% %% Our version of `\@listfiles' takes one token ahead at a time %% and counts the numbes of tokens that have been looked at so far. %% For each \emph{dummy} found instead of a filename character, %% (as with \LaTeX) a space is added to `\filename@area' %% that is used to move the filenames right. %% As opposed to the \LaTeX\ original version, `\@listfiles' stops %% being applied after times: \def\@listfiles##1{% \ifx##1\relax \edef\filename@area{ \filename@area}\fi \advance\count@\m@ne \ifnum\count@>\z@ \expandafter\@listfiles \fi }% \def\@dofilelist{% %% In \LaTeX's `\@dofilelist', we first replace the single space %% starting the title line by `\LNFL@spaces': \typeout{^^J\LNFL@spaces *File List*}% \@for\@currname:=\@filelist\do{% %% This is the loop body adding a list entry line, first like \LaTeX: \filename@parse\@currname \edef\reserved@a{% \filename@base.% \ifx\filename@ext\relax tex\else\filename@ext\fi}% \expandafter\let\expandafter\reserved@b \csname ver@\reserved@a\endcsname %% We use `\@tempa' for expanding both the filename and the list of dummies %% in time: \edef\@tempa{\filename@base\LNFL@dummies}% \count@\LNFL@chars\relax \expandafter\expandafter\expandafter\@listfiles\expandafter \filename@area\@tempa \typeout{% \filename@area\reserved@a \ifx\reserved@b\relax\else %% I prefer \emph{two} spaces between the columns to four of them: \space\space %%% \@spaces \reserved@b\fi}}% %% The line of stars: \typeout{ \LNFL@stars^^J}}% } %% %% moved up from end 2012/09/30: %% TODO: 1.~keyval package option avoiding `\listfiles' %% 2.~measuring longest filename? %% == Setting Name Length \emph{before} \cs{listfiles} == %% \label{sec:set} %% I first used |\SetLongNameFileListChars{}| %% for combining the package with 'myfilist' right in place of %% `\listfiles[]'. Both commands have the same effect %% on the following `\RequirePackage{myfilist}'. %% Now that I have realized that I could issue `\listfiles' earlier, %% `\SetLongNameFileListChars' is rather obsolete---but who knows\,...? \newcommand*{\SetLongNameFileListChars}{\def\LNFL@chars@set} %% This macro `\LNFL@chars@set' is used as the default for our new %% optional parameter for `\listfiles' (Sec.~\ref{sec:list}). \SetLongNameFileListChars{8} %% This sets the default value for `\listfiles' to the maximum number %% of characters in the base filename that %% \LaTeX\ %% 2012/03/15 %%% `\LaTeX' %% somewhat expects. %% %% == Shorthand for 'myfilist' == %% |\MaxLengthEmptyList{}[]| %% as described in Section~\ref{sec:short} (v0.2): \newcommand*{\MaxLengthEmptyList}[1]{% \listfiles[#1]\RequirePackage{myfilist}\EmptyFileList} %% %% == Leaving the Package File == \endinput %% %% == VERSION HISTORY == v0.1 2012/03/11 very first 2012/03/12 debugging; \LNFL@spaces, \LNFL@stars v0.1b 2012/03/14 doc fixes: avoiding arrow substitution in listing, space after "who knows" v0.1c 2012/03/15 more typographical fixes concerning "\LaTeX" v0.2 2012/09/30 \MaxLengthEmptyList