MiKTeX:错误无效参数函数:putc

MiKTeX:错误无效参数函数:putc

最近更新了我的 MiKTeX 安装后,我无法再编译用德语编写的大型文档。

幸运的是,我能够将有问题的文档缩减为以下 7 行 MWE。德语文本序列已被缩短到最短可能的长度,但错误仍然会发生。因此原始文档中的grunds德语单词不完整。grundsätzlich

\documentclass[parskip=half-]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\begin{document}
Während für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
\end{document}

编译此 MWE 会导致pdflatex MWE-utf8.tex命令行上输出以下错误消息:

[]\T1/lmr/m/n/10.95 Whrend f
Sorry, but pdflatex did not succeed.

The log file hopefully contains the information to get MiKTeX going again:

  C:\Users\xxxx\AppData\Local\MiKTeX\2.9\miktex\log\pdflatex.log

日志文件包含有关此编译运行的以下信息:

INFO  pdflatex - this process (10004) started by 'cmd' with command line: pdflatex MWE-utf8.tex
INFO  pdflatex - allowing known shell commands
INFO  pdflatex - enabling input (output) from (to) processes
FATAL pdflatex.core - Invalid argument
FATAL pdflatex.core - Function: putc
FATAL pdflatex.core - Result: 22
FATAL pdflatex.core - Data: <no data>
FATAL pdflatex.core - Source: Libraries\MiKTeX\TeXAndFriends\c4pstart.cpp:285
FATAL pdflatex - Invalid argument
FATAL pdflatex - Info: 
FATAL pdflatex - Source: Libraries\MiKTeX\TeXAndFriends\c4pstart.cpp
FATAL pdflatex - Line: 285
INFO  pdflatex - this process (10004) finishes with exit code 1
WARN  miktex.core - still open: MWE-utf8.log
WARN  miktex.core - still open: MWE-utf8.aux
WARN  miktex.core - still open: MWE-utf8.tex

以下是我目前的发现:

我已检查该文档和 MWE 确实是用 utf8 编码的。德语变音符号由ä字节序列 表示c3 a4üc3 bc表示öc3 b6

该问题可以在两台运行 Win10 x64 和 MiKTeX 的不同机器上重现,这些机器已更新到 2020-07-12 的存储库。MiKTeX 版本信息为This is pdfTeX, Version 3.14159265-2.6-1.40.21 (MiKTeX 20.6.29)。在第二台机器上,MiKTeX 被完全卸载并从头开始重新安装。

在运行 Win10 x64 和 MiKTeX 更新到 2020-06-15 存储库的机器上不会出现此问题。MiKTeX 版本信息为This is pdfTeX, Version 3.14159265-2.6-1.40.21 (MiKTeX 2.9.7440 64-bit)

出现错误时,有问题的德语文本序列Während für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds必须位于新段落的开头。如果将任何其他文本放置在有问题的德语文本之前的新段落开头,错误就会消失。

以某种方式修改有问题的文本也会使错误消失。例如,编写(当然毫无意义的)文本可以Während fürn die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds消除错误。

以下文本出现错误:

Während für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Während fürn ie Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Kährend für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Aäbcded für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Aäbcded güh ijk Lhasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds

以下情况不视为错误:

Während fürn die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Während für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grund
Lährend für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Während fü die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Während für die Phasenströme aufgrund de Sternschaltung die Nullsystemfreiheit grunds
Aäbcdef für die Phasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds
Aäbcded güh ijk Lmasenströme aufgrund der Sternschaltung die Nullsystemfreiheit grunds

在有问题的文本序列后面写入任何文本仍会给出错误消息。例如完成grundsgrundsätzlich

将文档的编码更改为 ISO8859-1 并使用\usepackage[latin1]{inputenc}stil 会出现错误。仅供参考:由等ä表示。e4

替换\documentclass[parskip=half-]{scrbook}\documentclass{article}可消除错误消息,并且修改后的 MWE 可成功编译。

不使用\documentclass{scrbook}[parskip=half-]选项也会导致 pdflatex 成功运行。

但当然我需要将scrbook课程与[parskip=half-]我的最终文档选项结合起来。

有人可以在最近更新的 MiKTeX 安装上使用上述 MWE 重现此错误吗?有什么方法可以修复此错误并再次编译我的文档吗?

答案1

更新:该错误已解决。


这是 miktex 中的一个传递错误。如果要将某些消息写入终端,而这些消息包含 utf8 中无效的字节,则它会失败。在您的情况下,这是包含变音符号的超满框消息。日志文件(8 位编码)包含此内容,并且 miktex 也尝试将其写入终端:

Overfull \hbox (4.07864pt too wide) in paragraph at lines 16--17
[]\T1/lmr/m/n/10.95 Während für die Phasen-ströme auf-grund der Stern-schal-tun
g die Null-sys-tem-frei-heit grunds 

TeXlive 通过删除终端上的变音符号来避免这个问题:

Overfull \hbox (4.07864pt too wide) in paragraph at lines 16--17
[]\T1/lmr/m/n/10.95 Whrend fr die Phasen-strme auf-grund der Stern-schal-tun
g die Null-sys-tem-frei-heit grunds

MiKTeX 很快也会做类似的事情,看看https://github.com/MiKTeX/miktex/issues/581. 直到那时才进行编译以 --interaction=batchmode避免终端输出。

相关内容