LINUX.ORG.RU

LaTeX запуск скрипта

 , , ,


0

2

Вопрос к матерым LaTeX`никам =)

Вообще внутри документа LaTeX можно исполнять скрипты, в том числе на Python.

Для этого, например, есть пакет python.

Помогите, пожалуйста, разобраться!

Собственно написала: \begin{python} print(2+3) \end{python}

Сразу возникла ошибка I can`t find file 'main.py.out' \end{python}

Нашла информацию тут и там.

Собственно из одного взяла

pdflatex -synctex=1 -interaction=nonstopmode --shell-escape %.tex

Из другого переопределение чего-то из пакета python.

После этого ошибок нет, но и результата тоже.

Простейший пример не оставляет никаких следов в итоговом pdf-документе.

\begin{python} print(2+3) \end{python}

Если написать

\begin{python} [optional.py] print(2+3) \end{python}

то этот текст сохранится в файл optional.py.

Но записать что-то в файл можно и без пакета python.

Как запустить скрипт? Что нужно сделать то...



Последнее исправление: TatianaSh (всего исправлений: 1)

Татьяна, вам сначала надо Кнута почитать, чтобы понять, как работает ТеХ!!!

Выполнение внешних программ делается при помощи команды \write18, т.к. это — очень опасная штука (любой может в пакете написать что-то вроде \write18{rm -rf /}), по умолчанию такая возможность отключена и включается она именно ключом --shell-escape.

Этот пакет скорее всего делает следующее: создает файл, в который запихивается содержимое окружения phyton, затем запускает phyton на исполнение и результат записывает в отдельный файл, который при помощи \input вставляется в текст.

Вполне возможно, что компилировать это нужно будет два раза (я не знаю, как этот пакет внутри устроен, и знать не хочу).

Если вам каждую компиляцию нужно запускать скрипты и вы готовы терпеть тормоза, не обязательно левые пакеты привлекать или \write18 использовать! Можно ведь и при помощи make это все сделать! И будет, кстати, удобней: не надо будет на каждый проход латеха выполнять все скрипты. Выполняться будут лишь нужные.

Eddy_Em ☆☆☆☆☆
()

Вот — простой пример, который выполняет код из аргумента макроса \bash и вставляет его выхлоп в документ:

...
\usepackage{verbatim}
\def\bash#1{\immediate\write18{#1 > tmpout.tex}\verbatiminput{tmpout}}
\begin{document}
Hello!.

\bash{ls -l}
\end{document}

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Можно ведь и при помощи make это все сделать! И будет, кстати, удобней: не надо будет на каждый проход латеха выполнять все скрипты. Выполняться будут лишь нужные.

Вот-вот! // Счастливый пользователь latexmk

iVS ★★★★★
()
Ответ на: комментарий от Eddy_Em

Про опасность \write18 уже читала, и зачем надо --shell-escape тоже.

Этот пакет скорее всего делает следующее: создает файл, в который запихивается содержимое окружения phyton, затем запускает phyton на исполнение

Вот и я так думала. Но он не запускает phyton. Только в файл записывает.

Я понимаю, что любую задачу можно сделать тыщей способов, но мне кажется вполне удобным написать код phyton`а в tex-файле и пусть он запускается пакетом) Что тут плохого то?)

TatianaSh
() автор топика
Ответ на: комментарий от TatianaSh

Что тут плохого то?)

1) долго компилять, 2) есть опасность убить все простой опечаткой (вы будете думать, что идет компиляция, а там файлы удаляются...).

Если п.2 не боитесь, а разносить мух и котлеты не хотите, то п.1 можно упростить: выхлоп всех макросов с питоном сваливать в один теховский файл, который читать в самом начале документа.

Т.е. конструкция \phyton{код} делает следующее:

  • инкрементирует некий счетчик (скажем, \phyt@n);
  • проверяет, определена ли команда \phyinpXXX (о ней — ниже): если определена, то вставляет в текст ее значение, если нет — делает дальнейшее;
  • помещает "код" во временный файл (пусть tmp.py);
  • в файл (пусть allphyton.tex) помещает: \def\phyinpXXX{ (XXX — счетчик \phyt@n римскими цифрами);
  • запускает python: python tmp.py >> allphyton.tex;
  • закрывает скобку вallphyton.tex.

В начале документа не забываем сделать \input{allphyton.tex}.

Все элементарно!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Я понимаю Ваше возмущение.

LaTeX чудесен и работает и на win. Но вот согласитесь, спрашивать про LaTeX на Windows-форумах как-то противоестественно)

TatianaSh
() автор топика
Ответ на: комментарий от TatianaSh

Не соглашусь. Про латех везде можно спрашивать, а вот про производство троллейбусов из буханок — только на винфаке.

Я считаю извращением работать на прошивке для игровых приставок!

Если вам хочется — пожалуйста, но тогда хотя бы теги соответствующие ставьте!

Я уверен, что пакет "python" не работает в мастдайке потому, что писался для nix`ов!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

запускает python

возможно вопрос дурацкий, но в общем то он тянется с первого поста. Как запустить из LaTeX`а...

Неважно, скрипт или myProg.exe.

Мне и то и др надо)

Со счетчиками должна разобраться, а запуск никак(

TatianaSh
() автор топика

Прикола ради глянул, как этот пакет работает. Действительно, я примерно так бы и сделал.

"Волшебная" строчка

\immediate\write18{cat \@pythoninclude\space\jobname.py | python > \jobname.py.out 2> \jobname.py.err}

формирует файл, который будет вставлен в документ. Естественно, конструкция вроде

cat jobname.py | python > jobname.py.out 2> jobname.py.err 

в мастдайке не взлетит!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от TatianaSh

Элементарно запустить — при помощи \write18

Но запускать надо в операционной системе, а не прошивке для игровых приставок, которая даже PATH не знает!

Вы сначала в "командной строке" мастдайки попробуйте запустить то, что хотите, чтобы латех выполнил! Поймете, что это бессмысленно!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ну извините) Правда не нашла норм. форума про латех кроме как тут)

TatianaSh
() автор топика
Ответ на: комментарий от TatianaSh

texlive хоть или миктех какой? Если миктех, у него не --shell-escape, а что-то вроде --enable-write18

для теста попробуйте вендузячий аналог echo "hello" > file.tex засунуть в аргумент \write18. Должен появиться файл с текстом. Если не появится — pdflatex кривой.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Вы сначала в «командной строке» мастдайки попробуйте запустить то, что хотите, чтобы латех выполнил!

В том-то и дело, что в командной строке все попробовала я сначала сделать. Из латеха ну прям должно быть возможно запускать...Он же так задуман)

Я не понимаю как запустить, например, notepad.exe ((

TatianaSh
() автор топика
Ответ на: комментарий от Eddy_Em

Миктех.

--enable-write18

Спасибо!) Читать мне надо учиться(((

Получилось)

Eddy_Em, Вы мне позволите обращаться к Вам, несмотря на то, что я пользуюсь прошивкой для игровых приставок?)

TatianaSh
() автор топика
Ответ на: комментарий от TatianaSh

Обращайтесь. Но желательно по латеховским вопросам. В вендах я не разбираюсь (уже почти 10 лет не пользуюсь вендой).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Eddy_Em, пользователей ms win обычно заманивают на правильную ОС скринсшотами, в которых показан процесс задачи и результат. :)

Увы, словами не заинтересовать.

NaiLi ★★
()
Ответ на: комментарий от NaiLi

Я не имею целью кого-то куда-то заманивать. А уж скриншоты командной строки — маразм.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.