summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/longnamefilelist/longnamefilelist.sty
blob: e9615888f99d33d56677e9f19949eae4954bd985 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
\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}[<digit><digit>]
%% \cs{RequirePackage}\{myfilist\}
%% \cs{EmptyFileList}[<read-again-files>]
%% \end{quotation}
%% With v0.2, the last three lines can be replaced by 
%% \[|\MaxLengthEmptyList{<digit><digit>}[<read-again-files>|]\]
%% ---``optionally" without \qtd{`[<read-again-files>]'}.
%% This may save the user from worrying about usage 
%% with 'myfilist'.
%% 
%% == \cs{listfiles} extended ==
%% \label{sec:list}
%% |\listfiles[<number>]| ``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 <number> 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 <number> 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 <number> 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{<number>}| 
%% for combining the package with 'myfilist' right in place of 
%% `\listfiles[<number>]'. 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{<digit><digit>}[<read-again-files>]|
%% 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