使用 minted 的 LuaLaTeX 问题(续……)

使用 minted 的 LuaLaTeX 问题(续……)

minted 和 LuaLaTeX 的问题问题下方的评论中有讨论,还有一个答案证实了这个问题。由于我也能证实这个问题,并且还有其他信息可以分享,所以继续提问似乎比延长评论或提供非答案更好。

我在两台机器上使用了另一个 MWE,但它与原始问题中的 mbert 的 MWE 相当:

  1. 台式机 CPU i9 32GB RAM Windows 11 V22H2 TeXStudio 4.4.1 MikTeX 2.9 更新 Python 3.11 Pygments 2.14
  2. 笔记本电脑 CPU AMD Athlon II 8GB RAM Xubuntu 22.04 TeXStudio 4.0.1 MikTeX 2.9 更新 Python 3.11 Pygments 2.14

两台机器上都使用了 MWE:

\documentclass{article}

\usepackage{minted}

\begin{document}

    \begin{minted}{c}
        int main() {
            printf("hello, world");
            return 0;
        }
    \end{minted}

\end{document}

我得到了以下结果:

  1. 使用 PDFLatex 进行编译得到了所需的结果。minted环境中的代码设置正确。创建的附加目录minted包含两个文件:一个具有长字符串名称,另一个名为default.pygstyle约 7kB。
  2. 使用 XeXeTeX 进行编译后,输出结果中所有空格和制表符均显示为 ,^^I且代码没有颜色。在包^^I中定义fancyvrb。 两台机器上都出现了这种情况。
  3. 在笔记本电脑(Xubuntu)上使用 LuaLaTeX 进行编译成功,但是不是在桌面上(Windows)。该目录是在mintedWindows 下创建的,但只包含 0kB 的文件default.pygstyle。因此是一个空目录。
  4. 使用 PDFLaTeX 进行编译,然后使用 LuaLaTeX 进行编译,仍然会出现!Package minted 错误:您必须pygmentize安装才能使用此包错误,但确实给出了正确的输出。第二次编译使用了第一次编译创建的目录。

Xubuntu 版本和 Windows 版本之间的日志文件的区别在于:

runsystem(for ^%i in (pygmentize.exe pygmentize.bat pygmentize.cmd) do set > min
ted_test.aex <nul: /p x=^%~$PATH:i>> minted_test.aex)...failed 

runsystem(del minted_test.aex)...executed

在 Windows 下,shell 转义的结果为失败的,而在 Xubuntu 下结果是执行. 两台机器使用相同的shellesc

Package: shellesc 2019/11/08 v1.0c unified shell escape interface for LaTeX
Package shellesc Info: Unrestricted shell escape enabled on input line 75.

在我看来,在 Windows 机器上-shell-escape使用 LuaLaTeX 时似乎存在某种模糊的问题。shellesc

希望有更了解 Windows 命令行内部工作原理的人shellesc可以阐明这个问题。

笔记:当然,我可以.tex在笔记本电脑上编译文件并喝一杯或多杯咖啡,但如果桌面上的问题得到解决,那就太好了。

附加信息 按照原始问题评论中的说明,我发现了以下问题小路编译时使用LuaLaTeX在 Windows 下:

\ShellEscape{path > path.txt}当我使用PDFLaTeX我得到了一个完整的path声明路径.txt——理所当然。然而当我使用LuaLaTeX 路径.txt只包含一行:PATH=C:\Open Source\MikTeX\miktex\bin\x64\这显然是错误的。因此 LuaLaTeX 以某种方式清除了正确的 Windows 路径语句并将其替换为 MikTeX 位置。

\documentclass[11pt]{article}

\usepackage{shellesc}

\begin{document}
    \ShellEscape{path > path.txt}
\end{document}

MikTeX LuaLaTeX 文档包含以下几行选项部分:

当 LuaTeX 可执行文件启动时,它会查找 --lua 命令行选项。如果没有 --lua 选项,命令行的解释方式与传统 pdfTeX 类似。但如果存在该选项,LuaTeX 将进入与标准 MiKTeX 程序不同的命令行解析替代模式。--lua 的存在使大多数其他选项变得不可靠,因为 Lua 初始化文件可以禁用路径搜索和/或将函数挂接到各种回调中。

--lua在我的 TeXStudio 设置中, LuaLaTeX 命令中没有开关。它只是显示:

lualatex.exe -synctex=1 -interaction=nonstopmode --shell-escape %.tex

相关内容