2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Latex из командной строки
Сообщение19.03.2015, 01:00 


25/11/08
449
Решил попытаться написать обработчик latex-строки в изображение.
Как я понял, обычно делают так. Создают файл .tex со всеми преамбулами, потом отправляют его на обработку в latex, он выдает файл .dvi, затем файл .dvi с помощью программы dvipng преобразуется в изображение.

С какими параметрами отправлять на обработку файл .tex, а затем .dvi?

Нашел такой пример:
Код:
cd /tmp; /usr/bin/latex myfile.tex < /dev/null |grep ^!|grep -v Emergency > /tmp/myfile.err 2> /dev/null 2>&1

Код:
/usr/bin/dvipng -q -T tight -D 155 -o myfile.png tmp/myfile.dvi 2>&1

Ну cd /tmp; - понятно, меняем текущую директорию. Дальше, как я понимаю, параметры для latex. Что означают эти команды?

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение19.03.2015, 04:19 
Заслуженный участник


16/02/13
4195
Владивосток
latex у вас с единственным параметром — имя файла. Всё прочее — фокусы bash, командного процессора. < — перенаправление: в качестве стандартного ввода передаётся /dev/null, сиречь пустой. | — неименованный пайп (не помню, как это по-русски): стандартный вывод latex передаётся команде grep ^!, то бишь, отфильтровываются строки, начинающиеся с «!», и передаются (через ещё один пайп) ещё одной grep, которая в данном случае выкидывает строки, где есть Emergency, прочие отправляются (> /tmp/myfile.err) в файл /tmp/myfile.err, а вот сообщения об ошибках сначала в пустоту (2> /dev/null), потом в тот же файл (2>&1). Тут какая-то ошибка, по-моему.
Что касается второй строчки, попробуйте
Используется синтаксис Bash
dvipng --help
.

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение19.03.2015, 07:53 


25/11/08
449
iifat, спасибо, теперь хоть знаю, что искать. Только не понятно, эти команды только для UNIX-образных систем? Точка с запятой как разделитель на Windows точно не работает :?

После команды:
D:\Server\htdocs\tmp>/Server/texlive/2014/bin/win32/dvipng -q -T tight -D 155 -o my123.png my123.dvi

Выдает ошибку:
This is /Server/texlive/2014/bin/win32/dvipng 1.14 Copyright 2002-2010 Jan-Ake Larsson GPL Ghostscript 9.15: Unrecoverable error, exit code 1

Когда из скрипта запускаю, скрипт зависает, будто ждет ответа.

При этом картинка нормальная создается. Что с ошибкой делать?

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение19.03.2015, 08:51 
Заслуженный участник


16/02/13
4195
Владивосток
ellipse в сообщении #992334 писал(а):
команды только для UNIX-образных систем?
Во-первых, есть команды и есть фокусы командной строки. К последним относятся «;», «|», <, >, 2>&1. Это конкретный процессор — bash. Он есть и для Виндовс, как, впрочем, и все команды. Возможно, и все прочие процессоры в Unix поддерживают всё это, возможно, нет. Хотя скорее да, впрочем, и cmd виндовый кроме точки с запятой, по-моему, всё поддерживает.
Про ошибку ничего сказать не могу. При чём тут Ghostscript — сам не пойму. Подождём кого поумнее.
ellipse в сообщении #992334 писал(а):
Когда из скрипта запускаю, скрипт зависает, будто ждет ответа
Скрипт какой? Тот что приведён?

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение19.03.2015, 13:46 


25/11/08
449
на php пока пробую:

Код:
$formula = 'x+y=z';

$tex = '\documentclass[12pt]{article}'."\n";
$tex .= '\usepackage[utf8]{inputenc}'."\n";
$tex .= '\begin{amssymb,amsmath}'."\n";
$tex .= '\begin{color}'."\n";
$tex .= '\begin{amsfonts}'."\n";
$tex .= '\begin{amssymb}'."\n";
$tex .= '\begin{pst-plot}'."\n";
$tex .= '\begin{document}'."\n";
$tex .= '\pagestyle{empty}'."\n";
$tex .= '\begin{displaymath}'."\n";

$tex .= $formula."\n";

$tex .= '\end{displaymath}'."\n";
$tex .= '\end{document}'."\n";

file_put_contents('tmp/my123.tex', $tex);

/*LaTeX to DVI */

$command = 'cd tmp && /Server/texlive/2014/bin/win32/latex my123.tex';

shell_exec($command);

if( !file_exists('tmp/my123.dvi') ) goto clean;

/* DVI to PNG */

$command = 'cd tmp && /Server/texlive/2014/bin/win32/dvipng -q -T tight -o my123.png my123.dvi';

shell_exec($command);

if( !file_exists('tmp/my123.png') )  goto clean;

clean: /* планируется уборка мусора */


Кстати, может кто знает, как убить процесс, который вызвал shell_exec, если время превышено?

-- Чт мар 19, 2015 15:24:44 --

Кажется, все заработало. А как сделать поддержку кириллицы? Кириллические символы просто игнорирует, будто их нет в формуле.

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение19.03.2015, 15:19 
Заслуженный участник
Аватара пользователя


23/07/05
17976
Москва
ellipse в сообщении #992436 писал(а):
Кириллические символы просто игнорирует, будто их нет в формуле.
\text{текст}
Или это тоже игнорирует?

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение19.03.2015, 15:35 


25/11/08
449
Someone в сообщении #992478 писал(а):
ellipse в сообщении #992436 писал(а):
Кириллические символы просто игнорирует, будто их нет в формуле.
\text{текст}
Или это тоже игнорирует?
О, работает. Можно всю формулу полностью заключать в \text{текст} или будут какие-то неполадки с формулами?

-- Чт мар 19, 2015 16:46:11 --

Можно использовать кодировку UTF-8 в tex-фйале?

-- Чт мар 19, 2015 16:59:15 --

А, так тут на форуме кириллица без \text тоже не работает.

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 02:37 


25/11/08
449
Как решить эту проблему?

Цитата:
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) (format=latex 2015.3.20) 20 MAR 2015 02:32
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**6519c72263ce077ed1a73d3685512ca3_1426807927.tex
(./6519c72263ce077ed1a73d3685512ca3_1426807927.tex
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, et
hiopic, farsi, arabic, pinyin, croatian, bulgarian, ukrainian, russian, slovak,
czech, danish, dutch, usenglishmax, ukenglish, finnish, french, basque, ngerma
n, german, swissgerman, ngerman-x-2012-05-30, german-x-2012-05-30, monogreek, g
reek, ibycus, ancientgreek, hungarian, bengali, tamil, hindi, telugu, gujarati,
sanskrit, malayalam, kannada, assamese, marathi, oriya, panjabi, italian, lati
n, latvian, lithuanian, mongolian, mongolianlmc, nynorsk, bokmal, indonesian, e
speranto, coptic, welsh, irish, interlingua, serbian, serbianc, slovenian, friu
lan, romansh, estonian, romanian, armenian, uppersorbian, turkish, afrikaans, i
celandic, kurmanji, polish, portuguese, galician, catalan, spanish, swedish, th
ai, loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo
File: size12.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
)
\c@part=\count79
\c@section=\count80
\c@subsection=\count81
\c@subsubsection=\count82
\c@paragraph=\count83
\c@subparagraph=\count84
\c@figure=\count85
\c@table=\count86
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
)
(/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty
Package: ucs 2004/10/17 UCS: Unicode input support

(/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def
File: uni-global.def 2012/04/20 UCS: Unicode global data
)
\uc@secondtry=\count87
\uc@combtoks=\toks14
\uc@combtoksb=\toks15
\uc@temptokena=\toks16
)
(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
Package: inputenc 2008/03/30 v1.1d Input encoding file
\inpenc@prehook=\toks17
\inpenc@posthook=\toks18

(/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def
File: utf8x.def 2004/10/17 UCS: Input encoding UTF-8
))
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2005/09/27 v1.99g Standard LaTeX package

(/usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2aenc.def
File: t2aenc.def 2005/09/27 v1.0i Cyrillic encoding definition file
)
LaTeX Font Info: Try loading font information for T2A+cmr on input line 100.


(/usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd
File: t2acmr.fd 2001/08/11 v1.0a Computer Modern Cyrillic font definitions
)
! Font T2A/cmr/m/n/12=larm1200 at 12.0pt not loadable: Metric (TFM) file not found.
<to be read again>
relax
l.100 \fontencoding\encodingdefault\selectfont

?
! Emergency stop.
<to be read again>
relax
l.100 \fontencoding\encodingdefault\selectfont


End of file on the terminal!


Here is how much of TeX's memory you used:
888 strings out of 493486
11901 string characters out of 3143549
63973 words of memory out of 3000000
4260 multiletter control sequences out of 15000+200000
3938 words of font info for 15 fonts, out of 3000000 for 9000
957 hyphenation exceptions out of 8191
22i,0n,20p,371b,71s stack positions out of 5000i,500n,10000p,200000b,50000s
No pages of output.

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 02:44 
Заслуженный участник
Аватара пользователя


31/01/14
11305
Hogtown
dvipng использует gs для постскипта но это можно избежать

http://www.nongnu.org/dvipng/dvipng_4.html

Известно, что 9.14 содержал баги, но вроде в 9.15 их нет

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 02:51 
Заслуженный участник


27/04/09
28128
ellipse в сообщении #992493 писал(а):
Можно использовать кодировку UTF-8 в tex-фйале?
И можно, и стоит, тем более что в преамбуле вы уже указали её, и тех будет читать текст в ней.

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 03:07 


25/11/08
449
Red_Herring в сообщении #992855 писал(а):
dvipng использует gs для постскипта но это можно избежать
Так вроде проблема не с dvipng, а с latex. Или Вы просто между прочим совет даете :roll:

Имеете ввиду это?
--nogssafer* Don't use -dSAFER in ghostscript calls

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 03:21 
Заслуженный участник


16/02/13
4195
Владивосток
ellipse в сообщении #992862 писал(а):
проблема не с dvipng, а с latex
Насколько могу судить, не найден шрифт larm1200. Посмотрите, есть у вас там файлы larm*.*?

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 03:46 


25/11/08
449
iifat, вот все, что найдено:
Цитата:
~# find / -name *larm*
/usr/lib/perl/5.14.2/auto/POSIX/alarm.al
/usr/local/mgr5/www/webmail-afterlogic/webmail/libraries/Sabre/VObject/Component/VAlarm.php
/usr/local/mgr5/external/include/net-snmp/library/snmp_alarm.h
/usr/share/texmf/tex4ht/ht-fonts/win/1251/lh/lh-t2a/larm.htf
/usr/share/texmf/tex4ht/ht-fonts/unicode/lh/lh-t2a/larm.htf
/usr/share/texmf/tex4ht/ht-fonts/iso8859/5/lh/lh-t2a/larm.htf
/usr/share/texmf/tex4ht/ht-fonts/koi/8r/lh/lh-t2a/larm.htf
/usr/share/doc/gawk/examples/prog/alarm.awk
/usr/share/man/man3/ualarm.3.gz
/usr/share/man/man2/alarm.2.gz

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 03:57 
Заслуженный участник


27/04/09
28128
Показалось, в вашей преамбуле чего-то не хватает — только не знаю, чего. И почему там \begin в некоторых местах вместо \usepackage? А если не вместо, должны быть соответствующие \end тогда…

 Профиль  
                  
 
 Re: Latex из командной строки
Сообщение20.03.2015, 04:16 
Заслуженный участник
Аватара пользователя


31/01/14
11305
Hogtown
ellipse в сообщении #992862 писал(а):
Так вроде проблема не с dvipng, а с latex. Или Вы просто между прочим совет даете

Кто-то спрашивал причём gs

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group