我正在为我的大学开发几个 LaTeX 软件包。它们应该易于使用且适用范围广泛。当然,这些软件包提供了许多新的宏,我使用 的xparse
接口定义这些宏,例如\NewDocumentCommand{\dof}{}{\ensuremath{n}}
。
由于我无法事先知道最终用户是否要使用pdflatex
、xelatex
或进行编译lualatex
,因此我倾向于使我的代码远离任何排版引擎特定的软件包。但是,我注意到在我用于软件包 CI 的 docker 镜像中(将我的转换dtx
为sty
和随附的pdf
),我无法创建sty
或pdf
文件,因为xparse
会触发inputenc Error
。在我的 Windows10 计算机和 Ubuntu 18.04 WSL 上本地运行,它没有问题。
确切的错误信息是
! Package inputenc Error: Unicode character ε (U+03B5)
(inputenc) not set up for use with LaTeX.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.115 ...way, it offers a replacement for LaTeX2ε
’s \newcommand
?
! Emergency stop.
...
l.115 ...way, it offers a replacement for LaTeX2ε
’s \newcommand
! ==> Fatal error occurred, no output PDF file produced!
我深入研究了我的代码,试图找到类似的文本,it offers a
但在源代码中找不到任何这样的文本。经过越来越深入的挖掘,我发现触发错误的行是xparse
ctan 上的描述。包的描述如下
该软件包提供了用于生成文档级命令的高级接口。这样,它就可以替代 LaTeX2ε 的 \newcommand 宏,并具有显著改进的功能。
罪魁祸首是ε
内部LaTeX2ε
。让我更奇怪的是:我在本地 texlive2019 安装中找不到任何包含“它提供了 LaTeX2ε 的替代品”的源代码(grep -ri "it offers a replacement for"
在内部进行了检查texlive/2019/texmf-dist/
,没有结果)。
现在,我知道如果我想在源代码中输入unicode字符,例如,我应该使用\usepackage{fontspec}
(或) 。所以我使用该包只是为了检查它是否能解决我的问题,但它确实解决了,并且特定于或。因此,我会强迫任何想要使用我的包的人使用或作为排版引擎。\usepacakge[utf8]{inputenc}
ε
fontspec
inputenc
pdflatex
fontspec
xelatex
lualatex
lualatex
xelatex
那么,这是怎么回事?是里面有“错误”xparse
还是我做错了什么?我使用 LaTeX 已经超过 15 年了,我想我知道如何使用它,特别是在 Windows 和 UNIX 等不同操作系统上排版同一文档时。
重现错误的 MWE 可能看起来像这样
\documentclass{article}
\usepackage{xparse}
\begin{document}
Hello, world.
\end{document}
但是,它没有重现我的错误。所以我猜想这与我的包文件和 docker 镜像有关,dtx
但我无法准确指出实际错误的来源。
您可以在这里找到我的 docker 镜像(Ubuntu 18.04 上的 TeXlive 2019):
https://hub.docker.com/r/philipptempel/docker-ubuntu-tug-texlive/
我也尝试从我的 docker 镜像中使用 TeXlive 2018,但出现了同样的错误。
您可以在我的 repo 中查看我的代码和 CI 的输出:
https://gitlab.com/philipptempel/latex-failure-xparse
将 变成 的命令dtx
如下sty
:
pdflatex --shell-escape package.ins
并将其转化dtx
为文档pdf
:
pdflatex --shell-escape file.dtx
makeindex -s gind.ist file.idx
makeindex -s gglo.ist -o file.gls file.glo
pdflatex --shell-escape file.dtx
编辑1:
日志档案:
https://pastebin.com/SCibevJv
有问题的文件(之一)dtx
:
https://gitlab.com/philipptempel/latex-failure-xparse/blob/master/ustutttext.dtx
对应ins
文件:
https://gitlab.com/philipptempel/latex-failure-xparse/blob/master/ustutt.ins