今天,我的一个 dtx 文件的生成因以下错误而停止:
! Undefined control sequence.
\UseTextAccent ...up \@firstofone \let \@curr@enc
\cf@encoding \@use@text@en...
由于我已经两个多月没有更改文件了,但上周更新了我的 MiKTeX(并仔细听取了 @Ulrike Fischer 在上次 DANTE 会议上对内核更改的报告),我很高兴地很快发现,新的 LaTeX 内核(2018/04/01)是造成这种情况的原因。按照pdflatex '\UseRawInputEncoding \input{FILENAME.dtx}'
LaTeX 新闻文档中所述,一切都运行顺利。
然后我开始准备 MWE,这导致了\newunicodechar
来自同一个调用包导致的问题:
% \iffalse meta-comment
%<*internal>
\iffalse
%</internal>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
\expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\generate{
\file{\jobname.cls}{\from{\jobname.dtx}{class}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\generate{
\file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\ifx\fmtname\nameofplainTeX
\expandafter\endbatchfile
\else
\expandafter\endgroup
\fi
%</internal>
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{testclass.dtx}
%</driver>
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{testclass}
%<*class>
[2018/04/16 v1.0 A LaTeX class]
%</class>
%<*driver>
\documentclass{ltxdoc}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[ngerman]{babel}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
% \GetFileInfo{\jobname.dtx}
% \DoNotIndex{\newcommand,\newenvironment}
%
% \title{A test class}
% \author{Martin Sievers}
%
% \maketitle
%
% \StopEventually{^^A
% \PrintChanges
% }
%
% \section{Implementation}
% \begin{macrocode}
%<*class>
% \end{macrocode}
% \begin{macrocode}
\LoadClass{minimal}
% \end{macrocode}
% \begin{macrocode}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[english]{babel}
\RequirePackage{newunicodechar}
\newunicodechar{⸗}{\hyphen}
% \end{macrocode}
% \begin{macrocode}
%</class>
% \end{macrocode}
% \Finale
\endinput
但是,将所有内容放入一个简单的 LaTeX 文件中不会导致相同的错误。所以,肯定还有更多相关信息...
这是由于将 UTF8 更改为文件的新标准编码而导致的可预见问题吗?dtx 文件被编码为 UTF8,并且正如您所见,始终有一个inputenc
使用该utf8
选项的条目。
答案1
使用当前版本(2018、2019)
发布的代码产生错误
! Package inputenc Error: Unicode char ⸗ (U+2E17)
(inputenc) not set up for use with LaTeX.
问题是,该newunicodechar
包已被加载并用于在生成的类文件中声明这个字符,但是排版文档没有使用这个类,所以 latex 无法排版这一行:
\newunicodechar{⸗}{\hyphen}
您可以在排版文档中为该字符声明一个设置,标准字体实际上没有合适的字符所以我只是-
在这里使用。
这是在问题中发布的,并添加了
\DeclareUnicodeCharacter{2E17}{-}
% \iffalse meta-comment
%<*internal>
\iffalse
%</internal>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
\expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\generate{
\file{\jobname.cls}{\from{\jobname.dtx}{class}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\generate{
\file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\ifx\fmtname\nameofplainTeX
\expandafter\endbatchfile
\else
\expandafter\endgroup
\fi
%</internal>
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{testclass.dtx}
%</driver>
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{testclass}
%<*class>
[2018/04/16 v1.0 A LaTeX class]
%</class>
%<*driver>
\documentclass{ltxdoc}
\RequirePackage[utf8]{inputenc}
\DeclareUnicodeCharacter{2E17}{-}
\RequirePackage[T1]{fontenc}
\RequirePackage[ngerman]{babel}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
% \GetFileInfo{\jobname.dtx}
% \DoNotIndex{\newcommand,\newenvironment}
%
% \title{A test class}
% \author{Martin Sievers}
%
% \maketitle
%
% \StopEventually{^^A
% \PrintChanges
% }
%
% \section{Implementation}
% \begin{macrocode}
%<*class>
% \end{macrocode}
% \begin{macrocode}
\LoadClass{minimal}
% \end{macrocode}
% \begin{macrocode}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[english]{babel}
\RequirePackage{newunicodechar}
\newunicodechar{⸗}{\hyphen}
% \end{macrocode}
% \begin{macrocode}
%</class>
% \end{macrocode}
% \Finale
\endinput