summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-filename.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-filename.html')
-rw-r--r--Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-filename.html94
1 files changed, 94 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-filename.html b/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-filename.html
new file mode 100644
index 00000000000..3937df6fbcc
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-filename.html
@@ -0,0 +1,94 @@
+<head>
+<title>UK TeX FAQ -- question label filename</title>
+</head><body>
+<h3>What&rsquo;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&rsquo;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&rsquo;re using
+TeX interactively), <code>\</code><code>jobname</code> has the value <code>texput</code>
+(the name that&rsquo;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 &mdash; 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.
+<p/>If you&rsquo;re not inputting things from a file that&rsquo;s already been input,
+the job is almost trivial:
+<blockquote>
+<pre>
+\def\ThisFile{\jobname}
+\let\OldInput\input
+\renewcommand{\input}[1]{%
+ \renewcommand{\ThisFile}{#1}%
+ \OldInput{#1}%
+}
+</pre>
+</blockquote><p>
+With that, the macro <code>\</code><code>ThisFile</code> always contains the last thing
+input: it starts pointing at the base file of your document
+(<code>\</code><code>jobname</code>), and thereafter changes every time you use
+<code>\</code><code>input{</code><em>file</em><code>}</code>.
+<p/>Most ordinary users will quickly become irritated with the simplicity
+of of the <code>\</code><code>ThisFile</code> mechanism above. The following code is more
+cunning: it maintains details of the files you&rsquo;ve &lsquo;come through&rsquo; to
+get to where you are, and it restores <code>\</code><code>ThisFile</code> to what the
+previous file was before returning.
+<blockquote>
+<pre>
+\def\ThisFile{\jobname}
+\newcounter{FileStack}
+\let\OrigInput\input
+\renewcommand{\input}[1]{%
+ \stackinput{#1}{\OrigInput}%
+}
+\newcommand{\stackinput}[2]{%
+ \stepcounter{FileStack}%
+ \expandafter\let
+ \csname NameStack\theFileStack\endcsname
+ \ThisFile
+ \def\ThisFile{#1}%
+ #2{#1}%
+ \expandafter\let\expandafter
+ \ThisFile
+ \csname NameStack\theFileStack\endcsname
+ \addtocounter{FileStack}{-1}%
+}
+</pre>
+</blockquote><p>
+To do the same for <code>\</code><code>include</code>, we need the simple addition:
+<blockquote>
+<pre>
+\let\OrigInclude\include
+\renewcommand{\include}[1]{%
+ \stackinput{#1}{\OrigInclude}%
+}
+</pre>
+</blockquote><p>
+Both examples of patching <code>\</code><code>input</code> assume you always use
+LaTeX syntax, i.e., always use braces around the argument.
+<p/>The <i>FiNK</i> (&ldquo;File Name Keeper&rdquo;) package provides a
+regular means of keeping track of the current file name (with its
+extension), in a macro <code>\</code><code>finkfile</code>. If you need the unadorned file
+name (without its &lsquo;<code>.tex</code>&rsquo;), use the commands:
+<blockquote>
+<pre>
+\def\striptexext#1.tex{#1}
+...
+\edef\ThisFile{\expandafter\stripext\finkfile}
+</pre>
+</blockquote><p>
+The <i>FiNK</i> 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>