如何在 .log 文件中输入的 \string 命令后添加空格

如何在 .log 文件中输入的 \string 命令后添加空格

考虑一下这段代码,它改编自 命令\incompatible@packageRevTex4-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
 }%
}%

相关内容