6

次を使用してLaTeXドキュメントをコンパイルするPHPスクリプトがあります。

exec('cd /path/to/doc && /usr/bin/latexmk -pdf filename.tex');

これは私のLaTeXドキュメントの一部で機能していますが、最新のドキュメントはコンパイルされず、ログを見ると次のことがわかります。

!pdfTeX error: pdflatex (file ecrm1000): Font ecrm1000 at 600 not found
==> Fatal error occurred, no output PDF file produced!

私が見つけたのは、LaTeXが必要なフォントパッケージを見ることができなかった結果です。ユーザー名で同じコンパイルコマンドを実行すると、ドキュメントは正常にコンパイルされます。だから私の質問は、PHP(www-dataとして実行)を取得して必要なLaTeXパッケージにアクセスするにはどうすればよいですか?

以下を使用して、www-dataアカウントで必要なパッケージをインストールしてみました。

sudo -u www-data sudo apt-get install texlive-fonts-recommended

しかし、それはwww-dataのパスワードを要求します。これは私が設定したものではなく、私が投げたものではないと私は信じています。

何か助けがあれば、Ubuntu12.04を実行しています。

4

4 に答える 4

2

sudo mktexpk --destdir /usr/share/texmf-texlive/fonts/pk/ljfour/jknappen/ec/ --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 ecrm1000

...すべてのユーザーがフォントを使用できるようにします(missingfont.logと同じですが、-destdir引数を使用します)。

于 2012-07-16T13:00:48.243 に答える
1

私は同様の問題で実行し、呼び出したシェルスクリプトで$HOME環境変数をに設定することで解決しました(または、書き込み可能なフォルダーはここで問題ないと思います)。TeX.SXの詳細を参照してください。/var/wwwpdflatexwww-data

于 2016-01-25T03:05:06.777 に答える
0

あなたはそのsudo考えに正しいですが、パスワードの問題を回避するために、簡単な解決策があります。

www-dataは、sudoersリストのにある必要がetc/sudoersあります。このリスト内で、スーパーコマンドの制御方法を定義できます。www-dataをパスワードを必要としないsudoerとして設定することは可能です...しかし、それはセキュリティの観点からはあまり賢い考えではありません。したがって、sudoersリストで、ユーザーが実行できるコマンドを指定できます。コマンドのみを許可する/usr/bin/latexmkと、セキュリティの問題が回避され、Webサーバーがパスワードなしでスーパーコマンドを実行できるようになります。

Ubuntuのこのヘルプページをチェックしてください:https : //help.ubuntu.com/community/Sudoers-特にNOPASSWDセクション。

あなたの場合の例は次のようになります:

# This lets "www-data" user run a command without a password
www-data mark-computer= NOPASSWD: /usr/bin/latexmk
于 2012-06-28T08:36:55.890 に答える
0

最終的にコンパイルが機能するようになったのは次のとおりです。

私自身のホームフォルダの下には、LaTeXが必要なフォントを保存するために使用していた隠しフォルダがありました~/.texmf-var。このフォルダfonts/pk/ljfour/jknappen/ecには13個のフォントファイルが含まれており、そのうちのいくつかはlatexmkが不満を言っていたものでした。

解決策は、コンパイルしたいLaTeXファイル(file.tex)を一時ディレクトリ(フォントをコピーした場所)に生成し、そこでコンパイルしてから、出力PDFを保存したい場所に移動することでした。例を挙げて説明します。

file_put_contents('~/website/latexFiles/temp/file.tex', $latex_data);
exec('/usr/bin/latexmk -pdf -cd ~/website/latexFiles/temp/file.tex');
exec('mv ~/website/latexFiles/temp/file.pdf ~/website/pdfs/desiredFilename.pdf');
exec('rm ~/website/latexFiles/temp/file.*');

したがって、最初の行は、PDFにコンパイルするディレクトリにlatexファイルを生成します($ latex_dataは、作成するLaTeXドキュメントを含む文字列です)。

さて、これをすべて機能させる部分は~/website/latexFiles/temp、と呼ばれるにディレクトリを作成すること$HOMEです。次に、にコピーします(またはリンクしますが、コピーしました~/.texmf-var~/website/latexFiles/temp/$HOMElatexmkこれは、必要なフォントを調べるためのパスです。LaTeXファイルをコンパイルする前に-cdlatexmkが移動するようにスイッチを使用すると、フォントを細かく調整できるようになります。~/website/latexFiles/temp

3行目は、最終的に出力ファイルが必要な場所にファイルをコピーし.pdf、最後の行は、同じファイル名の一時ディレクトリから残りのすべてのファイルを削除します。.tex他のユーザーが生成している可能性のあるファイルを削除しないように、ファイルには必ず一意のファイル名を使用します。

うまくいけば、他の誰かがこれが役に立つと思うでしょう。

于 2012-06-29T23:45:20.400 に答える