Вызвать LaTeX на именованном канале (fifo)?

Я запускаю LaTeX на именованном канале fifo в Unix. Я создаю фифо вот так:

$ mkfifo fifo

Затем я запускаю LaTeX вот так:

$ latex fifo

Этот процесс блокируется и не имеет вывода, пока я не напишу в fifo из другой оболочки:

$ echo "\\end" > fifo

Тогда результат $ latex fifo будет следующим:

This is pdfTeXk, Version 3.1415926-1.40.9 (Web2C 7.5.7)
%&-line parsing enabled.
entering extended mode

Однако процесс LaTeX никогда не заканчивается. Как можно довести LaTeX до конца? Я пробовал отправить его chr (0) и chr (4) (т.е. ctrl-d), но ни один из них не работает. Есть ли какая-то команда, которая сообщит LaTeX о выходе (например, что-то вроде \ exit)?

Спасибо за чтение.

ИЗМЕНИТЬ:

Примечательно, что при запуске tex вместо варианта latex следующее работает должным образом:

$ echo "story\\end" > fifo

(между тем в консоли текс)

$ tex fifo
This is TeX, Version 3.1415926 (Web2C 7.5.7)
(./fifo [1] )
Output written on fifo.dvi (1 page, 212 bytes).
Transcript written on fifo.log.

Однако, хотя Лесли Лэмпорт отмечает в Система подготовки документов LaTeX на стр. 233, что \ end был заменен на \ end {document}, ни одно из следующих действий не завершает сеанс LaTeX:

$ echo "\begin{document}story\end{document}"
$ echo "\\begin{document}story\\end{document}"

person Brian M. Hunt    schedule 18.09.2009    source источник


Ответы (2)


Я бы посоветовал позволить вашей оболочке направлять FIFO трубу в соответствии со стандартом.

latex < fifo

Когда я это сделаю, я сначала получаю такой вывод:

This is pdfeTeXk, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2009.3.25)  18 SEP 2009 14:25
entering extended mode
 file:line:error style messages enabled.
 %&-line parsing enabled.

а затем после команды echo:

**\end

*
! Emergency stop.
<*> \end

End of file on the terminal!
person brianegge    schedule 18.09.2009
comment
brianegge: Большое спасибо за ответ - это определенно работает, но взрывается с -interaction = nonstopmode и загромождает журналы, например, (Введите команду или произнесите `\ end '). - person Brian M. Hunt; 18.09.2009

Если я сначала отобразлю пустую строку в fifo, а затем отобразлю остальную часть документа, все будет нормально.

mkfifo test
latex test

Другая консоль:

echo "" > test
echo "\documentclass{report}\begin{document}asdf\end{document}" > test

Первая консоль:

xdvi test

Я предполагаю, что LaTeX выполняет два прохода файла, а TeX - нет. На первом проходе LaTeX пытается что-то определить, затем закрывает файл и снова открывает его для второго прохода.

person dreamlax    schedule 18.09.2009
comment
@dreamlax: Спасибо за ответ. Когда я пытаюсь это сделать (с помощью xelatex), я получаю следующую ошибку:! Ошибка LaTeX: отсутствует \ begin {document}. См. Объяснение в руководстве LaTeX или в LaTeX Companion. Введите H ‹return› для немедленной помощи. ... l.1 o cumentclass {отчет} \ begin {document} asdf \ end {document} - person Brian M. Hunt; 18.09.2009
comment
@dreamlax: Замечу, что он отлично работает с обычным LaTeX. Мальчик. - person Brian M. Hunt; 18.09.2009
comment
@Brian: Ой, звучит как большая паутина сложных вопросов. . . что произойдет, если вы введете одно и то же дважды в xelatex вместо того, чтобы сначала повторить пустую строку? - person dreamlax; 18.09.2009
comment
@ Брайан: О нет! Я хотел бы помочь вам и дальше, но то, что я предложил, - лучшее, что я могу сделать :( - person dreamlax; 18.09.2009
comment
@dreamlax: Не беспокойся! Большое спасибо за ваш вклад. Я собираюсь пойти, но люди XeTeX, сейчас. :) - person Brian M. Hunt; 18.09.2009
comment
Лучше ли работает замена пустой строки на строку, содержащую только \ relax? Мне кажется, я припоминаю, что некоторые введения в TeX рекомендовали это, когда вы вводите команды в интерактивном режиме. - person Jouni K. Seppänen; 18.09.2009