
ドキュメントに LaTeX コード スニペットを記述したいので、minted パッケージをロードしました。しかし、コンパイル時に次のエラーが表示されました。
! パッケージ minted エラー: LaTeX を -shell-escape フラグ付きで呼び出す必要があります。説明については、minted パッケージのドキュメントを参照してください。
この問題についてどうか助けてください!
前もって感謝します!
答え1
minted パッケージはシェルへのアクセスを必要とするため、エディター内でこれを許可する必要があります。これを行うには、-shell-escape
エディターの LaTex、PdfLaTex、XeLaTex、および LuaLaTex のコマンド リストに追加する必要があります。「TexWorks」でこれらのコマンドを変更するには、「オプション > TexWorks の設定 > コマンド」に移動して、次のコマンドを追加します-shell-escape
。
latex.exe -shell-escape -src -interaction=nonstopmode %.tex
pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
xelatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
lualatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
pdflatex と shellescape を有効にした TeXworks
\write18 enabled
上記をファイルに対して実行するとコンソールが表示されます
または
また、コードを tex ファイルに保存し ( という名前を付けたとしますtestMinted.tex
)、ファイルが存在するフォルダー ( にあるとしますC:\Users\uqapourm\Desktop\testMinted
) に移動してコマンド ラインで実行することで、pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode testMinted.tex
コマンド ラインからコンパイルすることもできます。
安全
場合によっては、tex ファイル内から外部コマンドを実行できると便利です。たとえば、一部のタイプセッティングを外部化したり、bibtex などの外部ツールを使用したりすることができます。これは、\write18
tex プリミティブを介して利用できます。
The problem is that it allows for almost everything.
tex ファイルは移植性があることを意図しており、サードパーティのファイルをコンパイルするときにセキュリティ上の問題を心配する必要はありません。そのため、デフォルトではこのプリミティブは無効になっています。
ユーザーがこれを使用する必要がある場合は、シェルとのやり取りでファイルの作成者を信頼していることをコンパイラーに明示的に伝える必要があります。これがまさにオプション--shell-escape
引数のポイントです。
長年にわたり、\write18
オペレーティング システムへのバックドアとして使用されてきました。構文的には、TeX はこれをファイルへの書き込みとして扱いますが、register 18
実際にはコマンドを実行する事前に開かれたファイルとして扱われます。
「無制限」とはwrite18
、任意のコマンドを実行できることを意味します。そのため、これを許可して誰かが送信した TeX ファイルを実行すると、任意のコードが実行されたり、パスワード ファイルがスパム ボットに電子メールで送信されたりする可能性があります。
これは明らかにセキュリティ上のリスクですが、Tex ディストリビューションに自然に含まれている、常に許可したいコマンドがいくつかあります (画像やフォントの変換など)。そのため、web2c では、ユーザー (またはデフォルトでは texlive のメンテナー) が「許可された安全な」コマンドのセットを設定でき、これらのコマンドは制限モードで実行できます。
3 番目の選択肢は、 からコマンドをまったく実行しないことです\write18
。
「制限された \write18 が有効」とはどういう意味ですか? また、TexLive がそれを報告し続けるのはなぜですか?
TeXworks でシェル エスケープを有効にするにはどうすればよいでしょうか?
追伸
パッケージを動作させるために、キャッシュをクリアする必要がある場合があります。これにより操作は遅くなりますが、エラーは回避されます。これを行うには、 にオプションを追加します\usepackage[cache=false]{minted}
。