xparse: 包描述中的 unicode 字符 inputenc 错误

xparse: 包描述中的 unicode 字符 inputenc 错误

我正在为我的大学开发几个 LaTeX 软件包。它们应该易于使用且适用范围广泛。当然,这些软件包提供了许多新的宏,我使用 的xparse接口定义这些宏,例如\NewDocumentCommand{\dof}{}{\ensuremath{n}}

由于我无法事先知道最终用户是否要使用pdflatexxelatex或进行编译lualatex,因此我倾向于使我的代码远离任何排版引擎特定的软件包。但是,我注意到在我用于软件包 CI 的 docker 镜像中(将我的转换dtxsty和随附的pdf),我无法创建stypdf文件,因为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但在源代码中找不到任何这样的文本。经过越来越深入的挖掘,我发现触发错误的行是xparsectan 上的描述。包的描述如下

该软件包提供了用于生成文档级命令的高级接口。这样,它就可以替代 LaTeX2ε 的 \newcommand 宏,并具有显著改进的功能。

罪魁祸首是ε内部LaTeX2ε。让我更奇怪的是:我在本地 texlive2019 安装中找不到任何包含“它提供了 LaTeX2ε 的替代品”的源代码(grep -ri "it offers a replacement for"在内部进行了检查texlive/2019/texmf-dist/,没有结果)。

现在,我知道如果我想在源代码中输入unicode字符,例如,我应该使用\usepackage{fontspec}(或) 。所以我使用该包只是为了检查它是否能解决我的问题,但它确实解决了,并且特定于或。因此,我会强迫任何想要使用我的包的人使用或作为排版引擎。\usepacakge[utf8]{inputenc}εfontspecinputencpdflatexfontspecxelatexlualatexlualatexxelatex

那么,这是怎么回事?是里面有“错误”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

相关内容