LaTeX выполнение в проблемах php и путей - PullRequest
0 голосов
/ 19 марта 2011

Я пытаюсь скомпилировать исходный файл латекса из php, используя exec:

echo shell_exec("/usr/texbin/pdflatex source.tex");

К сожалению, latex не видит все пакеты , когда он вызывается через php.

Например, я получаю

LaTeX Error: File `customclass.cls' not found

, когда я пытаюсь использовать customclass, установленный в моей локальной папке texmf. Существует также та же проблема для некоторых пакетов, установленных в других местах.

Это, конечно, как-то связано с переменной пути или чем-то подобным для настройки, но я не смог найти что-то в течение часа.

У кого-нибудь есть идея?

Ответы [ 3 ]

1 голос
/ 11 марта 2012

Вы можете поместить файлы * .cls в тот же каталог, что и source.tex.Если вы затем измените каталог на «текущий каталог», то при запуске латекса он также будет найден интерпретатором латекса и использован для компиляции вашего латексного файла.

Это также лучшее решение для использования с php, так как вы не хотите, чтобы пользователь вашего приложения устанавливал что-то в домашний каталог пользователя www-data.Это может быть запрещено по соображениям безопасности.

Итак, решение таково:

  • поместите source.tex в каталог с именем latexfiles (или по вашему выбору)
  • поместите ваши * .cls файлы вlatexfiles
  • использует следующий код для компиляции вашего латексного документа:
passthru('cd /path/to/latexfiles/; pdflatex source.tex', $r);
echo $r; 
1 голос
/ 04 апреля 2013

Источник файла /Users/My/Sites/tex/index.php ниже.Например, пусть он будет доступен по http://localhost/~My/tex/index.php ссылке.

<code><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>PDF file compillation</title>
</head>
<body>
<?php 
ini_set('safe_mode', 'Off');
$output = array();
/*
   /usr/texbin/ - directory, where the pdftex exists
   /Users/My/Sites/tex/output - directory for test.pdf and everything else. This directory have to have permissions to write.
   /Users/My/Sites/tex/test.tex - source .tex file
*/
exec("/usr/texbin/pdftex --shell-escape --synctex=1 -output-directory=/Users/My/Sites/tex/output /Users/My/Sites/tex/test.tex", $output);
if($output){
    echo("<h3>Console output</h3><pre>".implode("\n", $output)."
"); / * /Users/My/Sites/tex/output/test.pdf - файл результатов после компиляции * / echo ('

Перейти к скомпилированному PDF-файлу

');} else {echo ('

Ошибка

Ошибка выполнения сценария оболочки.

');}?>
1 голос
/ 19 марта 2011

Интерпретатор PHP, вероятно, работает от имени другого пользователя, такого как www-data или что-то связанное: это означает, что он не может видеть пакеты, установленные в каталоге texmf вашего обычного пользователя (я предполагаю, что вы подразумеваете под локальным ), потому что пользовательский texmf загружается только когда pdflatex запускается от имени этого пользователя.

Это похоже на потенциальное решение для расширения пути LaTeX, где бы ни находился ваш локальный texmf, на основе переменных оболочки: Временная установка (La) файлов TeX (из FAQ по TeX).

...