Changes

Jump to navigation Jump to search
718 bytes added ,  12:56, 20 November 2012
Template typo
* How to pass over part of the source to an external program?See also: [[write18]]
There are two ways, <cmd>executesystemcommand</cmd> and<cmd>installprogram</cmd>. <cmd>executesystemcommand</cmd> is equal == How to<cmd>immediate</cmd><cmd>write18</cmd> while <cmd>installprogram</cmd> definesa program in the tui file which is then run before the next execution pass over part oftexexec. I do not know what is the best source of their documenentation.to an external program? ==
<There are two ways: {{cmd>|executesystemcommand}} and{{cmd|installprogram}}.* {{cmd|executesystemcommand}} is equal to {{cmd|immediate}}{{cmd|write18}} while* {{cmd|installprogram}} defines a program in the tui file which is then run before the next execution of texexec.I do not know what is the best source of their documenentation. {{cmd|write</cmd> }} is explained in the texbookTeXbook, <cmd>[[write18</cmd> ]] executes its argument on shell.
luatex will have a better model for executing commands on the shell, and some
of it is explained in the luatex manual. (But luatex is still pre-alpha, so
the interface can change).
<{{cmd>|installprogram</cmd> }} is not documented, you need to read cont{{src|core-uti.tex }} and{{src|texutil.rb }} to understand how it works.
I found ConTeXt sources to be the best way to understand how these things are
working. See [[modules:t-lilypond|t-lilypond]], which checks if [[write18 ]] is enabled or not, and thenuses <{{cmd>|executesystemcommand</}} or {{cmd> or |installprogram}}: <cmdtexcode>\def\LP{texmfstart --ifchanged=\lily!filename.tmp --exec bin:lilypond -b eps -dno-gs-load-fonts -dinclude-eps-fonts \lily!filename.tmp}\def\PDF{texmfstart --ifchanged=\lily!filename.eps pstopdf \lily!filename.eps}\ifeof18 \installprogram{\LP}% \doif\jobsuffix{pdf}{% \installprogram{\PDF}% }%\else \executesystemcommand{\LP}% \doif\jobsuffix{pdf}{% \executesystemcommand{\PDF}% }%\fi</cmdtexcode>.  The modulewrites stuff to a temporary file, and then uses lilypond to get a ps/pdf whichis included back in the document. Another example is {{src|m-r.tex }} which writes
things to a temp file and runs them through R (a statistical program) and
types the output. It also shows how you can capture the contents of an
evironment to a temp file. The same idea is used in the [[modules:vim|t-vim ]] module. Ofcourse, the ConTeXt sources have plenty of examples. There is also {{src|core-buf.tex}}
where the buffer handling is implemented, and the sources related to metapost
handling, which are perhaps the best example of how to go back and forth
cases where you simply want to capture part of tex source and write it
verbatim to a file, and then read the output back into tex.
 
== How to input the result? ==
If you want to read the output verbatim to ConTeXt, you can use
<code>\{{cmd|typefile|{filename}</code>}}. If the external program outputs tex file,then you can use <code>\{{cmd|input|{filename}</code>}}== Modules which use write18 == * {{src|m-r.tex}}* [[modules:t-lilypond|t-lilypond]]* [[modules:vim|t-vim]]* [[modules:gnuplot|t-gnuplot]]* [[modules:filter|t-filter]] [[Category:Inside ConTeXt]]

Navigation menu