Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 20, 2016 22:40:59

nesergen
Зарегистрирован: 2013-01-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

latex и python

Делаю эксперименты в работе с Latex и выводом текста в pdf. С Латексом разобрался с помощью модуля PyLatex, но возникла проблема с печатью Юникода штатными средствами моудля PyLatex. Единственный найденный мною выход заключается в использовании модуля TEX. Но опять возникла некая проблема, которую я решить не могу. При выполнении моей программы в Терминале Линукса получаю вывод ошибки:

 sergen-pc:~$ python /home/sergen/PythonExp/latex.py
Traceback (most recent call last):
  File "/home/sergen/PythonExp/latex.py", line 27, in <module>
    tex.convert('/home/sergen/PythonExp/full.tex', 'tex', 'pdf', max_runs=3)
  File "/usr/local/lib/python2.7/dist-packages/tex.py", line 149, in convert
    raise ValueError(log)
ValueError: This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdftex 2016.5.1)  20 OCT 2016 20:03
entering extended mode
 %&-line parsing enabled.
**/tmp/tex-temp-UzNg43/texput.tex
(/tmp/tex-temp-UzNg43/texput.tex)
! Emergency stop.
<*> /tmp/tex-temp-UzNg43/texput.tex
                                   
!  ==> Fatal error occurred, no output PDF file produced!

Не могу понять в чем причина, то ли в папке tmp с которой tex отказывается работать, то ли во внутренностях модуля tex ? Если знаете другой Питоновский модуль для конвертации файлов ТЕХ в PDF тоже буду рад попробовать.

Офлайн

#2 Окт. 21, 2016 08:36:28

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

latex и python

nesergen
Если знаете другой Питоновский модуль для конвертации файлов ТЕХ в PDF
Хм. может оффтоп, но мне казалось что питон для этого не нужен. В латехе есть команда pdflatex Вроде ее всегда достаточно.



Офлайн

#3 Окт. 21, 2016 19:34:21

nesergen
Зарегистрирован: 2013-01-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

latex и python

мне нужно автоматизировать изготовление ПДФ, поэтому пользуюсь Питоном и его родными библиотеками, в частности PyLatex'ом.

Офлайн

#4 Окт. 21, 2016 21:29:19

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

latex и python

nesergen
мне нужно автоматизировать изготовление ПДФ
Хорошо что вы привели код ошибки. Однако вы не привели код которым этого добились. Еще лучше посмотреть что получилось в файле который вы пытаетесь скормить латеху.

nesergen
Питоном и его родными библиотеками, в частности PyLatex'ом.
С какого перепугу это родная библиотека? Просто одна из многих библиотек созданных сообществом.

Почитал документацию. Не проникся. Помоему пользы от такой библиотеки ноль. В большинстве случаев генерации документа там надо поправить пару тройку цифр, или добавить табличку. При этом воспользоваться любым шаблонизатором будет гораздо проще чем делать весь документ с нуля в питоне.



Офлайн

#5 Окт. 21, 2016 22:10:01

nesergen
Зарегистрирован: 2013-01-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

latex и python

По просьбам трудящихся код программы.

 #! ./usr/bin/python3
# -*- coding: utf-8 -*-
from pylatex import Document, Section, Subsection, Tabular, Math, Package,  MultiRow
from pylatex.utils import italic
import tex
doc = Document()
table4 = Tabular(u'|c|c|c|')
table4.add_hline()
col1_cell = MultiRow(2, data=u'span-2')
col2_cell = MultiRow(2, data=u'span-3')
table4.add_row((col1_cell, u'123', col2_cell ))
table4.add_hline(start=2,  end=2)
table4.add_row((u'', tex.escape_latex(u'rty'), u'' ))
table4.add_hline()
doc.append(table4)
doc.generate_tex(u'/home/sergen/PythonExp/tex-exp/full')
tex.convert(u'/home/sergen/PythonExp/tex-exp/full.tex', u'tex', u'pdf', max_runs=3)

Тот файл .tex который указан в ошибке я посмотреть не могу, т.к. создаваемая временная папка самоуничтожается сразу после возникновения ошибки. Но выложу файл .tex который получается непосредственно генерацией pylatex`ом

 \documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|c|}
\hline
\multirow{2}{*}{span{-}2}&123&\multirow{2}{*}{span{-}3}\\
\cline{2-2}
&rty&\\
\hline
\end{tabular}
\end{document}

Про шаблонизаторы - не понял мысль.

Вот то что должно получиться после генерации ПДФ. Вот только в этом примере не использовался юникод.
https://yadi.sk/i/9dWO3h-ExLSUR

Кстати, ошибка не связана с папкой /tmp, я изменил место создания временных файлов в модуле tex , но ошибка осталась прежней, а папка с временными файлами по прежнему самоликвидируется.

Отредактировано nesergen (Окт. 21, 2016 22:33:20)

Офлайн

#6 Окт. 22, 2016 09:51:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

latex и python

nesergen
По просьбам трудящихся код программы.
Спасибо. Я правда не стал ставить абсолютно не нужный мне модуль, но если зайдем с тупик поставлю и попробую воспроизвести ошибку.
Но остается непонятно что вы имеете ввиду под печатью юникода?

В вашем коде настораживают u“some”. в питоне 3 они ничего не значат. Полные пути тоже не good, хотя для отладки новичком может и ничего. Нежелательно зазывать модуль latex. Легко наехать на другой модуль с тем-же именем.

nesergen
Тот файл .tex который указан в ошибке я посмотреть не могу
Вы можете посмотреть этот файл. Вам указаны модуль и строчка. Ставите там точку останова отладчика и украдаете файл до его уничтожения.

Ваш tex файл нормальный. У меня pdflatex его съедает. А у вас? У вас может быть с настройками texlife проблемы.

nesergen
Про шаблонизаторы - не понял мысль.

 import subprocess as sp
from mako.template import Template
res = Template(r"""\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|c|}
\hline
\multirow{2}{*}{span{-}2}&${a}&\multirow{2}{*}{span{-}3}\\ 
\cline{2-2}
&${b}&\\ 
\hline
\end{tabular}
\end{document}""").render(a=123, b="rty")
with open("out.tex", "w", encoding="utf-8") as f:
    f.write(res)
sp.check_call("pdflatex out.tex", shell=1)
Обычно сам текст шаблона держат в отдельных файлах тогда код займет пару абзацев
Получается короче и более контролируемо. Вы контролируете удаление временных файлов, кодировку в которой пишется результат и т.п.

Мне кажется основная идея модуля который вы используете в том чтобы заменить язык latex полностью на язык python. Но они пока далеко не продвинулись, осталось много конструкций от латеха в виде сырых строк. И самое главное не надо тогда латех для генерации pdf привлекать.

Проблема в том, что в латехе есть огромное количество модулей для решения различных задачек. И всю эту орду прийдется переписывать. Я пока не могу придумать для чего модуль pylatex полезно использовать, хотя соглашусь что язык latex не фонтан.

Кстати есть любителе и обратного подхода не латех в питон а питон в латех пихают

https://habrahabr.ru/post/59782/



Отредактировано doza_and (Окт. 22, 2016 10:58:09)

Офлайн

#7 Окт. 23, 2016 00:43:59

nesergen
Зарегистрирован: 2013-01-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

latex и python

Основная проблема решена. Инструментами отладки питона удалось найти источник ошибки. Конвертору нужо скармливать не путь к файлу, а непосредственно его содержимое, чистый текст. Спасибо за полезные мысли !

Но остается непонятно что вы имеете ввиду под печатью юникода?

Я имею в виду русский текст в Латексе. По этому вопросу попрошу Вас сделать ПДФ из следующего документа и сообщить результат:
 \documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|c|}
\hline
\multirow{2}{*}{span{-}2}&Кирилица, едрить её за ногу&\multirow{2}{*}{span{-}3}\\
\cline{2-2}
&Unicode, бутерброд ему в рот...&\\
\hline
\end{tabular}
\end{document}

Проблема в том, что в латехе есть огромное количество модулей для решения различных задачек. И всю эту орду прийдется переписывать. Я пока не могу придумать для чего модуль pylatex полезно использовать, хотя соглашусь что язык latex не фонтан.
Питон мне нравится своей простотой кода, кроме того, привыкнув к структуре его кода , не хочется ломать голову над структурой других языков типа Латекс. Поэтому для собственного удобства использую питоновские варианты модулей нужных мне пакетов. Возможностей PyLatex мне вполне достаточно для моих нужд.

Отредактировано nesergen (Окт. 23, 2016 00:44:22)

Офлайн

#8 Окт. 23, 2016 01:15:25

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

latex и python

nesergen
и сообщить результат:
Не работает.

Работает если писать
 \usepackage[T2C]{fontenc}



Офлайн

#9 Окт. 23, 2016 20:18:29

nesergen
Зарегистрирован: 2013-01-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

latex и python

О-о-о !!! Сэр !!!! Премного благодарен ! Теперь всё работает, включая модуль pylatex и печать pdf с кирилицей. Привожу итоговый код моего маленького эксперимента для будущих поколений:

 #! ./usr/bin/python3
# -*- coding: utf-8 -*-
from pylatex import Document,   Tabular,    MultiRow
doc = Document(fontenc='T1,T2C')
table4 = Tabular('|c|c|c|')
table4.add_hline()
col1_cell = MultiRow(2, data='span-2')
col2_cell = MultiRow(2, data='span-3')
table4.add_row((col1_cell, u'Кирилица, едрить её за ногу', col2_cell ))
table4.add_hline(start=2,  end=2)
table4.add_row(('', u'Юникод, сапог ему врот', '' ))
table4.add_hline()
doc.append(table4)
doc.generate_pdf(u'/home/sergen/PythonExp/tex-exp/full' )

Как итог можно сказать следующее:
- весь кирилический текст должен быть Юникодом , который модуль будет конвертировать в нужный ему формат
- должна быть добавлена поддержка русского языка:
  • -строкой fontenc='T1,T2C' в классе Document
    -в операционной системе sudo apt-get install texlive-latex-base texlive-doc-ru texlive-lang-cyrillic

Отредактировано nesergen (Окт. 23, 2016 20:20:37)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version