LaTeX 内核升级后 dtx 文件出现问题(2018/04/01)

LaTeX 内核升级后 dtx 文件出现问题(2018/04/01)

今天,我的一个 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

相关内容