Difference between revisions of "How TeX reads input"
Jump to navigation
Jump to search
(New page.) |
m |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | |||
− | |||
Including the contents of another file with TeX is done with | Including the contents of another file with TeX is done with | ||
<code>\input</code>. But you have to be careful: TeX appends a character | <code>\input</code>. But you have to be careful: TeX appends a character | ||
Line 53: | Line 51: | ||
X\ignorespaces \input temp\relax \removeunwantedspaces X | X\ignorespaces \input temp\relax \removeunwantedspaces X | ||
</texcode> | </texcode> | ||
+ | |||
+ | |||
+ | == Piping == | ||
+ | |||
+ | ''From [[User:Taco|Taco]]'s post on the mailing list:'' | ||
+ | |||
+ | Latest pdfTeX allows piping: | ||
+ | \input "|ruby ./myscript.rb \vartest XXXXXXXXX" | ||
+ | |||
+ | the magic trick is the | symbol. With the current tex: | ||
+ | <texcode> | ||
+ | \writ18{ruby ./myscript.rb \vartest XXXXXXXXX > whatever.tex} | ||
+ | \input whatever % or something using \openin ... | ||
+ | </texcode> | ||
+ | |||
+ | [[Category:Tools]] |
Latest revision as of 14:39, 8 June 2020
Including the contents of another file with TeX is done with
\input
. But you have to be careful: TeX appends a character
with the current value of \endlinechar
to each line of an
inputed file, and that character is later converted to a space. That means,
that the following 2 examples give the same results:
\starttext \immediate\write18{echo -n X >temp.tex} X\input temp X \stoptext
\starttext \immediate\write18{echo X >temp.tex} X\input temp X \stoptext
There are at least 5 solutions, to get rid of the space before the last X:
- Setting
\endlinechar
to -1 temporarily:
\immediate\write18{echo X >temp.tex} X{\endlinechar=-1 \input temp }X
- Writing a percent sign to the end of the line:
\immediate\write18{echo X\letterpercent >temp.tex} X\input temp X
- Ending the written line with
\relax
(or a similar space-gobbling command):
\immediate\write18 {echo X\letterbackslash\letterbackslash relax >temp.tex} X\input temp X
- Changing the catcode of the current
\endlinechar
to 9 (ignored) also works:
\immediate\write18{echo X >temp.tex} X{\catcode`\^^M=9 \input temp }X
- Ignoring and removing the space:
\immediate\write18{echo X >temp.tex} X\ignorespaces \input temp\relax \removeunwantedspaces X
Piping
From Taco's post on the mailing list:
Latest pdfTeX allows piping:
\input "|ruby ./myscript.rb \vartest XXXXXXXXX"
the magic trick is the | symbol. With the current tex:
\writ18{ruby ./myscript.rb \vartest XXXXXXXXX > whatever.tex} \input whatever % or something using \openin ...