如何通过一个变量将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?

下一篇: Where are these LateX errors coming from?