summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/fileinfo/myfilist.sty
blob: c3fd202e328b519df1ce9cdd0123901bbd4aa708 (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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
\def \filename {myfilist.sty} %% macro package for LaTeX, 

%% modifies \listfiles to choose files to be listed and 
%% list them in a chosen file. 

\def \fileversion {0.71}     \def \filedate {2012/11/22} 

%% copyright (C) 2008, 2010, 2011, 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.3a 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:
% 
% Write a script file like gather.tex which you should have received 
% together with myfilist.sty. We use LaTeX2e (required!), yet (in 
% general) not for typesetting a document, therefore the script file 
% needn't contain \documentclass. myfilist.sty is loaded by 
% 
%     \RequirePackage{myfilist}
% 
% instead of \usepackage{myfilist}. Usually you don't want to have 
% myfilist.sty in the list, so type 
%
%     \EmptyFileList 
%
% next; or type it after some additional \RequirePackage... for 
% packages you want to use but not list. 
%
% Next list the names of the files 
% whose informations you want to get as arguments of 
%
%     \ReadFileInfos  or  \ReadPackageInfos  or  \ReadClassInfo
%
% With the latter two, you can omit ".sty" or ".cls" as with 
% \usepackage and \documentclass. With the first one, the file name 
% extension ".tex" may be omitted. The two first commands accept lists 
% with commas as separators almost like with \usepackage (currently we 
% must use "%" to hide a line break in the script, and there must be 
% no spaces in the list).---For more details on these commands, 
% please see readprov.pdf.
% 
% The list of files is actually printed in the transcript .log 
% and on screen on
%
%     \ListInfos
%
% The list can additionally be written into a plain text file, 
% 
%     \ListInfos[filelist.txt]
%
% as an example; i.e., you can use the brackets to tell which file is 
% to contain your list of files. The file informations appear in the 
% order of their names in your script file. 
% 
% \ListInfos concludes, ends the job, anything following in the 
% script file will be ignored.---All of this requires %% 2010/04/02
% that you run gather.tex or your other script file, about as
%
%     latex gather
%
% To list files that were loaded earlier in a different order, 
% list them in an \emph{optional argument} of \EmptyFileList, e.g.,
% % trick avoiding main replacement 2010/11/26:
%
%     \EmptyFileList[myfilist-.sty,readprov-.sty]
%
% NOTE: myfilist.sty (in its present state) is unable to list files 
% that don't contain \ProvidesPackage, \ProvidesClass, or 
% \ProvidesFile. myfilist.sty "loads" files to extract version 
% informations, but quits them as soon as it has found one of these
% LaTeX2e commands. 
%
% VARIANTS:
%
% v0.5 provides different interfaces to reduce (shared) TeX code 
% when (similar) shell or batch scripts generate that gather.tex. 
%
%     \ReadListFileInfos[<txt-file>]{<tex-files>} 
%
% is a shorthand for 
% 
%     \ReadFileInfos{<tex-files>}
%     \ListInfos[<txt-file>]
%
% \emph{Without} the optional argument, the screen output is \emph{not}
% written to disk---by default. However, preceding \ReadListFileInfos
% by 
% 
%     \WriteFileInfosTo{<txt-file>}
%
% is an alternative way to get the list in the plain text file. 
%
%     \FindReadListFileInfos[<txt-file>]{<tex-files>} 
%
% must be used rather than \ReadListFileInfos\ when the comma-separated 
% list (generated by the "find" utility) \emph{starts} with a comma.
% Alternatively, 
%
%     \UseFindUtility
%
% preceding \ReadListFileInfos deals with the leading comma.
%
% v0.7 adds 
% 
%     \NoStopListInfos[filelist.txt]
%
% after which the script can continue until \stop, e.g., for checks 
% with filedate.sty so that the latter's messages are the final lines 
% you see on screen. 
%
% TRICKS:
% 
% v0.6 first provides (e.g.)
%
%     \FileListRemark[----]{---DOC.---}
%
% in order to insert `---DOC.---  ----' in the list. This writes 
% funny files that may be somewhat dangerous ...
% I have used a bash script version of this for structuring 
% large file lists.
%
% v0.6 moreover provides two hooks and a package option 
% useful for the adhocfilelist package, 
% or perhaps even otherwise.
%
%     \ListGenerator
%
% is a hook for the final lines in the plain text output file (see implementation).
%
%     \NoBottomLines
%
% suppresses final messages of the LaTeX run, which may be nicer and 
% more informative on the screen. Package Option
%
%     [no-bot]
%
% is a kind of shorthand to issue \NoBottomLines.
%
% IMPLEMENTATION: 
%
\NeedsTeXFormat{LaTeX2e}[1994/12/01] %% \newcommand* etc. 
\ProvidesPackage{myfilist}
                [\filedate\space v\fileversion \space 
                 \string\listfiles\space-- mine only (UL)] 
% 
% |\ReadFileInfos|, |\ReadPackageInfos|, and |\ReadClassInfo|
% are implemented in readprov.sty:
\RequirePackage{readprov}[2010/11/26]
% 
% |\EmptyFileList[<read-again-files>]| %% opt. arg. 2010/11/26
\newcommand{\EmptyFileList}[1][]{%
  \let\@filelist\@gobble
  \@for\@tempa:=#1\do{%
    \global \expandafter \let \csname ver@\@tempa\endcsname \relax
    %% v0.4:
    \global \expandafter \let \csname opt@\@tempa\endcsname \relax}} 
% |\ListInfos[<output-file>]| %% was `external output file' 2012/10/25
\newcommand*{\ListInfos}[1][]{%
  \ifx$#1$\@dofilelist\else
    % \newwrite\file@of@filelist                %% mv. v0.6
    \immediate\openout\file@of@filelist=#1\relax
    \def\typeout##1{%
      \read@@typeout{##1}%
      \immediate\write\file@of@filelist{##1}}%
    \@dofilelist
    %% made at: 
    \@tempcnta\time      \@tempcntb\@tempcnta 
    \divide\@tempcnta 60 \count@\@tempcnta 
    \multiply\count@ 60  \advance\@tempcntb -\count@ 
    \typeout{ List made at
      \the\year/\two@digits{\the\month}/\two@digits{\the\day},
      \two@digits{\the\@tempcnta}:\two@digits{\the\@tempcntb}%
% v0.6 becomes more flexible here:
      \ListGenerator}
    \immediate\closeout\file@of@filelist
  \fi
  \stop}
  %% <- TODO how to suppress first empty line? 2008/03/16
\newwrite\file@of@filelist                      %% mv. v0.6
% emulating versions before v0.6:
\providecommand*{\ListGenerator}{%
    ^^J from script file \jobname.tex^^J}
\let\read@@typeout\typeout
% |\NoStopListInfos[<output-file>]| (v0.7)
\newcommand*{\NoStopListInfos}[1][]{{\let\stop\relax \ListInfos[#1]}}
% v0.5:
%
% There is a little (design) bug in \ListInfos: 
% When gather.tex's last line is \ListInfos without optional 
% argument or anything, LaTeX prompts for further input. 
% This might be fixed using ifnextok.sty, but I am not sure 
% right now. In |\VarListInfos|, \relax stops waiting for 
% input. \providecommand means that the default can be 
% overridden before loading myfilist.sty:
\providecommand*{\VarListInfos}{\ListInfos\relax}
% |\WriteFileInfosTo{<txt-file>}| overrides the previous default:
\newcommand*{\WriteFileInfosTo}[1]{%
    \renewcommand\VarListInfos{\ListInfos[#1]}}
% |\ReadListFileInfos[<txt-file>]{<tex-files>}|
\newcommand*{\ReadListFileInfos}[2][]{%
    \ifx$#1$\else\WriteFileInfosTo{#1}\fi
    \read@comma@guard\read@list@file@infos#2\stop}
\let\read@comma@guard\@empty
\def\read@list@file@infos#1\stop{%
% Here |\VarListInfos| is used finally:
    \ReadFileInfos{#1}\VarListInfos}
% |\UseFindUtility| activates \read@comma@guard in order 
% to kill a leading comma:
\newcommand*{\UseFindUtility}{%
    \let\read@comma@guard\@firstoftwo}
% |\FindReadListFileInfos[<txt-file>]{<tex-files>}|
\newcommand*{\FindReadListFileInfos}{%
    \UseFindUtility\ReadListFileInfos}
% v0.6:
%
% |\FileListRemark[<info>]{<filename>}|\\
% writes and reads a dummy file <filename> with \Provides... 
% content <info> which is empty by default:
\newcommand*\FileListRemark[2][]{%
    \immediate\openout\file@of@filelist#2
    \immediate\write\file@of@filelist{%
        \string\ProvidesFile{#2}[#1]}%
    \immediate\closeout\file@of@filelist
% v0.71 allows using \FileListRemark with 'filedate''s 
% \FileDateAutoChecks:
    {\ifx\@providesfile\FD@provfile
        \let\@pr@videpackage\FD@@provpkg
        \let\@providesfile  \FD@@provfile
     \fi
     \ReadFileInfos{#2}}}
% 
% |\NoBottomLines|
\newcommand*{\NoBottomLines}{%
    \let\STOP\stop \def\stop{\batchmode\STOP}}
% Package option |[no-bot]|:
\DeclareOption{no-bot}{\NoBottomLines}
\ProcessOptions
% Finally issuing |\listfiles| (already before v0.5):
\listfiles

\endinput 

%% VERSION HISTORY
v0.1    2008/03/19  created file "readprov.sty"
        2008/03/23  smart file name separation, \ifx$ for \ifcat$
        2008/05/22  typo ist -> it
v0.2    2010/04/03  renamed "myfiles.sty"; 
                    broke long lines etc. for doc
SENT TO CTAN -- declined
v0.2a   2010/04/08  undoubled \NeedsTeXFormat, copyright updated
v0.3    2010/11/26  split off from "myfiles.sty", opt. arg. for 
                    \EmptyFileList, doc. reworked
        2010/11/27  some USAGE clarifications
v0.3a   2011/01/29  two empty lines commented out
        2011/01/30  copyright updated
v0.4    2012/05/26  \EmptyFileList clears options
v0.5    2012/09/27  \ReadListFileInfos, \WriteFileList, 
                    \FindReadListInfos, \UseFindUtility
v0.6    2012/10/11  \FileListRemark, \ListGenerator, 
                    \NoBottomLines, [no-bot]
v0.6a   2012/10/12  adding \UseFindUtility and \FindReadListInfos 
                    in the history for v0.5
v0.7    2012/10/25  \NoStopListInfos
v0.71   2012/11/22  \FileListRemark works with \FileDateAutoChecks 
                    from `readprov.sty' v0.5;
                    doc. \FileListRemark: `\ ' -> `\\'