の助けを借りて以前の質問 TexStudio と arara、TexStudio 内で arara を使い始めることができました (やった!)。しかし、Xelatex コンパイル (先ほど示した URL の 2 番目のサンプル コード) を実行しているときに、次のエラー メッセージが表示されました (コンパイルが完了しませんでした)。
(/usr/local/texlive/2022/texmf-dist/tex/latex/supertabular/supertabular.sty
))
(/usr/local/texlive/2022/texmf-dist/tex/latex/glossaries/styles/glossary-tree.s
ty
))
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
! I can't find file `"|extractbb --version"'.
<to be read again>
\scan_stop:
l.72 \l__sys_internal_tl
(Press Enter to retry, or Control-D to exit)
Please type another input file name:
runpopen command not allowed: extractbb
extractbb
存在しており、(私のマシンでは)/usr/local/texlive/2022/bin/x86_64-linux/extractbb
単なる推測ですが、これはパス ( 'I can't find file `"|extractbb --version'
) の問題ではなく、シェルの権限 ( runpopen command not allowed : extractbb
) の問題である可能性はありますか? 修正方法についてのご提案があれば、ぜひお聞かせください。
------編集、David Carlisle のコメントに従って texmf.cfg について-----
私の「個人用」texmf.cfgのカスタマイズは、以下の追加だけです。
shell_escape_commands = pagelayoutapi
一方、改変されていない、「general」texmf.cfgは/usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf
、
% The default is true, because we already avoid adding the standard
% extension(s) in the usual cases. E.g., babel.sty will only look for
% babel.sty, not babel.sty.tex, regardless of this setting.
try_std_extension_first = t
% Enable system commands via \write18{...}. When enabled fully (set to
% t), obviously insecure. When enabled partially (set to p), only the
% commands listed in shell_escape_commands are allowed. Although this
% is not fully secure either, it is much better, and so useful that we
% enable it for everything but bare tex.
shell_escape = p
% No spaces in this command list.
%
% The programs listed here are as safe as any we know: they either do
% not write any output files, respect openout_any, or have hard-coded
% restrictions similar to or higher than openout_any=p. They also have
% no features to invoke arbitrary other programs, and no known
% exploitable bugs. All to the best of our knowledge. They also have
% practical use for being called from TeX.
%
shell_escape_commands = \
bibtex,bibtex8,\
extractbb,\
gregorio,\
kpsewhich,\
makeindex,\
repstopdf,\
r-mpost,\
texosquery-jre8,\
編集 - egreg の回答に対する返答をもう一度見直しました。egreg/usr/local/texlive/2022/texmf.cnf
の変更によって実際に問題は解決しましたが、指示 (ファイル内のコメントとして提供) が逆で、そのファイルには変更のみを入れるべきであり、次の場所にある元の行をすべて入れるべきではないと示されています/usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf
。
% (Public domain.)
% This texmf.cnf file should contain only your personal changes from the
% original texmf.cnf (for example, as chosen in the installer).
%
% That is, if you need to make changes to texmf.cnf, put your custom
% settings in this file, which is .../texlive/YYYY/texmf.cnf, rather than
% the distributed file (which is .../texlive/YYYY/texmf-dist/web2c/texmf.cnf).
% And include *only* your changed values, *NOT A COPY OF THE WHOLE THING!* [caps added here for emphasis--Birdman]
%
私がこの会話を続けるのは、私がこの警告を何らかの形で誤解しているのか(--> 全体をコピーしない)、それともこれらの指示コメント自体に誤りがあるのかを知りたいからです。
答え1
それは間違いなくあなたの改造のせいです。
shell_escape_commands = pagelayoutapi
あなたは許可していますのみpagelayoutapi
制限されたシェルエスケープでアプリケーションを実行します。
kpsewhich --var-value shell_escape_commands
コマンドラインから、次のように表示されるはずです
pagelayoutapi
(私のマシンで試してみました)。
texmf.cnf
上位レベルのファイルを変更する場合は、リスト全体をコピーして追加する必要があります。
shell_escape_commands = \
bibtex,bibtex8,\
extractbb,\
gregorio,\
kpsewhich,\
makeindex,\
repstopdf,\
r-mpost,\
texosquery-jre8,\
pagelayoutapi,\
読書はどのようにtexmf.cnf
機能しますか?
TeXツリーには通常2つのファイルがありますtexmf.cnf
。1つはトップレベルにあり、もう1つはにありますtexmf-dist
。
kpsewhich -a texmf.cnf
私のマシンでは
/usr/local/texlive/2022/texmf.cnf
/usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf
このようなファイルは他にもあるかもしれませんが、重要なのは、 に示されている順序で読み取られるということですkpsewhich -a
。
ファイル内に設定された変数の値はない後のファイルによって上書きされます。「メイン」(ただし最後に読み込まれる)ファイルには、次のような推奨事項があります。
% That is, if you need to make changes to texmf.cnf, put your custom
% settings in this file, which is .../texlive/YYYY/texmf.cnf, rather than
% the distributed file (which is .../texlive/YYYY/texmf-dist/web2c/texmf.cnf).
% And include *only* your changed values, *NOT A COPY OF THE WHOLE THING!* [caps added here for emphasis--Birdman]
「全体のコピーではない」とは、すべての変数を追加するのではなく、値を変更する必要がある変数のみを追加することを意味します。すべてを追加すると、多くの値を読み取って破棄する必要があるため、初期化が遅くなります。
トップレベルのtexmf.cnf
ファイルで次のように記述すると
shell_escape_commands =
制限されたシェルでは外部プログラムは許可されません。変数は増分的に設定されません。その値で始まる後続の行は無視されます。