[texhax] TeX/UNIX

Karl Berry karl at freefriends.org
Thu Nov 2 03:46:07 CET 2006


(Sorry for the delayed reply.)

      This is TeX, Version 3.141592 (Web2C 7.5.4)

I think this explains the difference in $ behavior.  Expanding $ within
filenames was added just last year, in web2c 7.5.5, for example TeX Live
2005.  For earlier versions, you just have to use some extra-TeX
mechanism to expand the variable.

      $ tex '\relax\input  ~/junk/bookdef  \end'   
      -----  
      This is TeX, Version 3.141592 (Web2C 7.5.4)
      (/usr/pubsw/lib/texmf/tex/latex/tools/.tex File ignored) [1]
      Output written on .dvi (1 page, 224 bytes).
      Transcript written on .log.
      -----
    In this case, it produced a file called ".dvi" (no name, only the
    extension). This dvi file contained exactly one line of text:
      /junk/bookdef

This is actually the expected behavior (I get the same).
Explanation: the
\input  ~/junk/bookdef
is seen by the TeX parser first.  And ~ is a macro in plain TeX, whose
expansion starts with the primitive \penalty.  As far as TeX is
concerned, it's as if the input was:

\input \penalty...

And there are no characters in the input filename.  So TeX appends the
.tex to the null string.  So TeX looks for a file named ".tex", and
finds it (hence the "File ignored", it's a \message inside that file).
No output is produced from that.

Then, TeX continues processing.  The \penalty is discarded, since it's
at the beginning of a line.  That leaves what looks like normal text:
/junk/bookdef, which TeX dutifully typesets.

I assume there was a page number "1" at the bottom, too.

Perhaps this is a good place to quote the TeXbook:
Computers are good at following instructions, but not at reading your mind.

:)


All the best,
Karl


More information about the texhax mailing list