如何通过一个变量将LaTeX代码传递给PHP中的pdflatex?
我试过这个:(.php文件)
<?php
$texscript = "
documentclass[12pt,a4paper]{article}
usepackage{helvet}
usepackage{times}
usepackage{multido}
usepackage{fancyhdr}
usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}
renewcommand{familydefault}{sfdefault}
begin{document}
fancyhf{} % clear all header and footer fields
renewcommand{headrulewidth}{0pt}
pagestyle{fancy}
%rhead{{largebfseriesthepage}}
rhead{{fbox{largebfseriesthepage}}}
setcounter{page}{1}
multido{}{1383}{vphantom{x}newpage}
end{document}
";
$pdflatex = shell_exec("echo $PATH > myenv; pdflatex ".$texscript." ");
?>
并出现错误:
pdflatex:这是pdfTeX,版本3.14159265-2.6-1.40.16(TeX Live 2015 / Debian)(预加载格式= pdflatex)受限 write18启用。 **! 终端上的文件结尾...
为什么?
上面给出的代码是在PHP变量中编写LaTeX并将其传递给pdflatex
命令的正确方法? 如果没有,那么PLZ建议更正! 我不想调用一个外部.tex
文件,而是将LaTeX代码写入PHP文件本身并从那里运行。
转义可能是一个部分,另一个是调用命令pdflatex
; 我绕过(第一次)通过在之前写入文件和(第二次)通过替换变量的注释和换行符,使pdflatex
不再有任何问题...
<?php
error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
$texscript = 'documentclass[12pt,a4paper]{article}
usepackage{helvet}
usepackage{times}
usepackage{multido}
usepackage{fancyhdr}
usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}
renewcommand{familydefault}{sfdefault}
begin{document}
fancyhf{} % clear all header and footer fields
renewcommand{headrulewidth}{0pt}
pagestyle{fancy}
%rhead{{largebfseriesthepage}}
rhead{{fbox{largebfseriesthepage}}}
setcounter{page}{1}
multido{}{1383}{vphantom{x}newpage}
end{document}
';
//write code to file
$fn="texfile.tex";
$myfile = fopen($fn, "w");
fwrite($myfile, $texscript);
fclose($myfile);
//then execute pdflatex with parameter
//didnt need
//echo $PATH > myenv;
$pdflatex = shell_exec('pdflatex ' .$fn .'' );
//var_dump( $pdflatex );
//test for success
if (!file_exists("texfile.pdf")){
print_r( file_get_contents("texfile.log") );
} else {
echo "PDF crated from filen";
}
//trying same without file
//removed comments and newlines
$texscript = preg_replace('/[ t]*%.*[ t]*[rn]+/', '', $texscript);
$texscript = preg_replace('/[rn]+/', '', $texscript);
//ahve a look on the variable
//var_dump($texscript);
$pdflatex = shell_exec('pdflatex "' .$texscript.'"' );
if (!file_exists("article.pdf")){
print_r( file_get_contents("article.log") );
} else {
echo "PDF created from Stringn";
}
?>
编写tex文件应该没有关系,除了所需的PDF之外,pdflatex也会编写文件。
还添加了用于替换comments / newline的正则表达式。
我使用GNU / Linux Debian 8在cli上调用脚本: php test.php
这产生输出:
PDF crated from file
string(405) "documentclass[12pt,a4paper]{article}usepackage{helvet}usepackage{times}usepackage{multido}usepackage{fancyhdr}usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}renewcommand{familydefault}{sfdefault}begin{document}fancyhf{}renewcommand{headrulewidth}{0pt}pagestyle{fancy}rhead{{fbox{largebfseriesthepage}}}setcounter{page}{1}multido{}{1}{vphantom{x}newpage}end{document}"
PDF created from String
和PDF文件都可以工作并具有相同的文件大小:
-rw-r--r-- 1 vv01f vv01f 3360 Mai 5 article.pdf
-rw-r--r-- 1 vv01f vv01f 3360 Mai 5 texfile.pdf
链接地址: http://www.djcxy.com/p/33431.html
上一篇: How to pass LaTeX code through a variable to pdflatex in PHP?