使用 RequirePackage[utf8]{inputenc} 正确吗?

使用 RequirePackage[utf8]{inputenc} 正确吗?

如果我创建一个包,使用它\RequirePackage[utf8]{inputenc}来支持 utf8 是否正确。我猜不是,但我如何声明这个包必须(应该)与 inputenc utf8 一起使用?

答案1

这是我所做的,newunicodechar需要utf8选项inputencinputenx并且不能与其他选项一起使用,并且不需要任何一个包:

\def\nuc@stop{\PackageWarningNoLine{newunicodechar}
  {This package won't work without loading\MessageBreak
   `inputenc' or `inputenx' with the `utf8' option}%
  \let\newunicodechar\@gobbletwo\endinput}
\@ifpackageloaded{inputenx}
  {\def\nuc@tempa{inputenx}}
  {\@ifpackageloaded{inputenc}{\def\nuc@tempa{inputenc}}{\nuc@stop}}
\@ifpackagewith{\nuc@tempa}{utf8}{}{\nuc@stop}
\@ifpackagewith{\nuc@tempa}{utf8x}{\nuc@stop}{}

尽管如此,这\let\newunicodechar\@gobbletwo只是为了允许处理文件。如果您需要使用,utf8可以像这样修改它:

\ProvidesPackage{xyz}
% Define an error message
\def\xyz@stop{\PackageError{xyz}
  {`inputenc' or `inputenx' loaded with wrong option.\MessageBreak
   This is a fatal error}
  {This package won't work if either `inputenc' or `inputenx'\MessageBreak
   are loaded with the `utf8' option. The LaTeX run will be terminated}%
   \fi\@@end} % the `\fi` is to match `\if@tempswa`
% Check for inputenx or inputenc
\@tempswafalse
\@ifpackageloaded{inputenx}
  {\def\xyz@tempa{inputenx}\@tempswatrue}
  {\@ifpackageloaded{inputenc}
    {\def\xyz@tempa{inputenc}\@tempswatrue}
    {\RequirePackage[utf8]{inputenc}}%
  }
% Check for the right option
\if@tempswa
\@ifpackagewith{\xyz@tempa}{utf8}{}{\xyz@stop}
\@ifpackagewith{\xyz@tempa}{utf8x}{\xyz@stop}{}
\fi

因此如果用户输入

\usepackage[utf8]{inputenc}
\usepackage{xyz}

什么也不会发生。但如果inputenc(或inputenx)在它之前没有加载,xyz则会加载它。如果向 传递了错误的选项inputenc,包将终止 LaTeX 运行。

相关内容