考虑一下这段代码,它改编自 命令\incompatible@package
。RevTex4-2
相关
部分只是\string\usepackage\ statement
以 开头的行中的\def\@tempa
:
\documentclass[12pt]{article}
\usepackage{cite}
\makeatletter
\def\class@name{SomeClass}
\def\incompatible@package#1{%
\@ifpackageloaded{#1}{%
\def\@tempa{I cannot continue. You must remove the \string\usepackage\ statement that caused that package to be loaded.}%
\ClassError{\class@name}{The #1 package cannot be used with \class@name}%
\@tempa\stop
}{%
% \class@info{#1 was not loaded (OK!)}% This is uncommented in the original, but I don't need it
}%
}%
\incompatible@package{cite}
\makeatother
\begin{document}
\end{document}
在 .log 文件中,将出现一条消息,内容为(请注意\使用包部分),
我无法继续。您必须删除导致该包被加载的 \usepackage\ 语句。
假设我们希望输出为\usepackage 语句, 不是\usepackage\ 语句。
以下修复无效:
\string\usepackage statement
给出\usepackage 语句
\string\usepackage~statement
给出\usepackage\nobreakspace {} 语句
{\string\usepackage} statement
给出{\usepackage} 语句
\string\usepackage {}statement
给出\usepackage{}语句
我确实找到了一种修复它的方法:
\expandafter\string\csname usepackage \endcsname
给出\usepackage 语句
但这似乎有些过分。
有没有更简单、更好的方法来获得所需的结果(仅使用核心 LaTeX)?
答案1
您可以使用\noexpand
而不是\string
。
I cannot continue. You must remove the \usepackage statement that caused that p
ackage to be loaded.
也\string\usepackage\space
可以,但是\noexpand
更短。
我不明白为什么定义\@tempa
:
\def\class@name{SomeClass}
\def\incompatible@package#1{%
\@ifpackageloaded{#1}{%
\ClassError{\class@name}{%
The #1 package cannot be used with \class@name
}{I cannot continue. You must remove the \noexpand\usepackage statement
that caused that package to be loaded.%
}%
\stop
}{%
% \class@info{#1 was not loaded (OK!)}% This is uncommented in the original,
% but I don't need it
}%
}%