summaryrefslogtreecommitdiff
path: root/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html')
-rw-r--r--Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html104
1 files changed, 72 insertions, 32 deletions
diff --git a/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html b/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html
index b52d06b4802..d66aec9f640 100644
--- a/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html
+++ b/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-filename.html
@@ -1,52 +1,92 @@
<head>
<title>UK TeX FAQ -- question label filename</title>
</head><body>
-<h3>What's the name of this file</h3>
+<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's not easy...
+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'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).
+(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 - the only way
+<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:
+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}
- \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}%
- }
+\def\ThisFile{\jobname}
+\let\OldInput\input
+\renewcommand{\input}[1]{%
+ \renewcommand{\ThisFile}{#1}%
+ \OldInput{#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
+</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>. The bundle includes a
-<i>fink.el</i> that provides support under <i>emacs</i> with
-AUC-TeX.
+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>