如果我创建一个包,使用它\RequirePackage[utf8]{inputenc}
来支持 utf8 是否正确。我猜不是,但我如何声明这个包必须(应该)与 inputenc utf8 一起使用?
答案1
这是我所做的,newunicodechar
需要utf8
选项inputenc
或inputenx
并且不能与其他选项一起使用,并且不需要任何一个包:
\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 运行。