summaryrefslogtreecommitdiff
path: root/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html
blob: b52d06b48026cfd224d1beb11112a61638f2f5a2 (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
<head>
<title>UK TeX FAQ -- question label filename</title>
</head><body>
<h3>What's the name of this file</h3>
<p>One might want this so as to automatically generate a page header or
footer recording what file is being processed.  It's not easy...
<p>TeX retains what it considers the name of the <em>job</em>, only, in
the primitive <code>\</code><code>jobname</code>; this is the name of the file first
handed to TeX, stripped of its directory name and of any extension
(such as <code>.tex</code>).  If no file was passed (i.e., you're using TeX
interactively), <code>\</code><code>jobname</code> has the value <code>texput</code> (the name that's
given to <code>.log</code> files in this case).
<p>This is fine, for the case of a small document, held in a single file;
most significant documents will be held in a bunch of files, and
TeX makes no attempt to keep track of files input to the
<em>job</em>.  So the user has to keep track, himself - the only way
is to patch the input commands and cause them to retain details of the
file name.  This is particularly difficult in the case of Plain
TeX, since the syntax of the <code>\</code><code>input</code> command is so peculiar.
<p>In the case of LaTeX, the input commands have pretty regular
syntax, and the simplest


<a href="FAQ-patch.html">patching techniques</a> can be used on them:
<pre>
  \def\ThisFile{\jobname}
  \newcounter{FileStack}
  \let\OrigInput\input
  \renewcommand{\input}[1]{%
    \stepcounter{FileStack}
    \expandafter\let
      \csname NameStack\theFileStack\endcsname
      \ThisFile
    \def\ThisFile{#1}%
    \OrigInput{#1}%
    \expandafter\let\expandafter
      \ThisFile
      \csname NameStack\theFileStack\endcsname
    \addtocounter{FileStack}{-1}%
  }
</pre>
(And similarly for <code>\</code><code>include</code>.)  The code assumes you always use
LaTeX syntax for <code>\</code><code>input</code>, i.e., always use braces around the
argument.
<p>The <i>FiNK</i> ("File Name Keeper") package provides a
regular means of keeping track of the current file name (with its
extension), in a macro <code>\</code><code>finkfile</code>.  The bundle includes a
<i>fink.el</i> that provides support under <i>emacs</i> with
AUC-TeX.
<dl>
<dt><tt><i>fink.sty</i></tt><dd><a href="ftp://cam.ctan.org/tex-archive/macros/latex/contrib/fink.zip">macros/latex/contrib/fink</a> (<a href="ftp://cam.ctan.org/tex-archive/macros/latex/contrib/fink.tar.gz">gzipped tar</a>, <a href="http://www.tex.ac.uk/tex-archive/macros/latex/contrib/fink/">browse</a>)
</dl>
<p><p>This question on the Web: <a href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=filename">http://www.tex.ac.uk/cgi-bin/texfaq2html?label=filename</a>
</body>