Форум сайта python.su
0
Делаю эксперименты в работе с 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!
Офлайн
253
nesergenХм. может оффтоп, но мне казалось что питон для этого не нужен. В латехе есть команда pdflatex Вроде ее всегда достаточно.
Если знаете другой Питоновский модуль для конвертации файлов ТЕХ в PDF
Офлайн
0
мне нужно автоматизировать изготовление ПДФ, поэтому пользуюсь Питоном и его родными библиотеками, в частности PyLatex'ом.
Офлайн
253
nesergenХорошо что вы привели код ошибки. Однако вы не привели код которым этого добились. Еще лучше посмотреть что получилось в файле который вы пытаетесь скормить латеху.
мне нужно автоматизировать изготовление ПДФ
nesergenС какого перепугу это родная библиотека? Просто одна из многих библиотек созданных сообществом.
Питоном и его родными библиотеками, в частности PyLatex'ом.
Офлайн
0
По просьбам трудящихся код программы.
#! ./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)
\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}
Отредактировано nesergen (Окт. 21, 2016 22:33:20)
Офлайн
253
nesergenСпасибо. Я правда не стал ставить абсолютно не нужный мне модуль, но если зайдем с тупик поставлю и попробую воспроизвести ошибку.
По просьбам трудящихся код программы.
nesergenВы можете посмотреть этот файл. Вам указаны модуль и строчка. Ставите там точку останова отладчика и украдаете файл до его уничтожения.
Тот файл .tex который указан в ошибке я посмотреть не могу
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)
Отредактировано doza_and (Окт. 22, 2016 10:58:09)
Офлайн
0
Основная проблема решена. Инструментами отладки питона удалось найти источник ошибки. Конвертору нужо скармливать не путь к файлу, а непосредственно его содержимое, чистый текст. Спасибо за полезные мысли !
Но остается непонятно что вы имеете ввиду под печатью юникода?
\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)
Офлайн
253
nesergenНе работает.
и сообщить результат:
\usepackage[T2C]{fontenc}
Офлайн
0
О-о-о !!! Сэр !!!! Премного благодарен ! Теперь всё работает, включая модуль 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' )
Отредактировано nesergen (Окт. 23, 2016 20:20:37)
Офлайн