有没有命令可以忽略后面的字符?

有没有命令可以忽略后面的字符?

是否存在一个命令可以忽略后面的字符,就像\^在后面的字符上戴帽子一样?

答案1

我不知道是否已经存在,但发布指令

\def\?#1{}

将会达到目的:\?abc给出bc,等等。

编辑:以下是对 Tim N 在评论中提出的问题的讨论:让 a\caption删除数字中的最后一个句点。它确实不是即使在默认article类中也可以

\renewcommand*\thefigure{\arabic{figure}\?}

这会产生一些错误,其中第一个实际上是“的参数\?有一个额外的}”,而不是“段落在\?完成之前结束”(这是第二个)。稍微\tracingmacros搜索一下就会发现以下现象:当\caption调用时,它首先增加figure计数器,然后调用\refstepcounter以便可以引用它,然后设置(使用)的\edef当前标签,它(最终)必须包含的值!猜猜是什么:额外的句号没有出现在in之后\@currentlabel\ref\thefigure\thefigure上下文,因此\?吞噬的右括号\edef命令. 因此出现错误。

让我们看看我们是否能得到你想要的东西。标题行分几个阶段构建,包括article以下离散步骤:

  • 生成标题“数字”(例如文本“图 1.2。”);
  • 将其附加到标题“文本”(的参数\caption),例如在它们之间插入冒号和空格。

这些对应于文档类定义的内部宏\fnum@figure\@makecaption,并且显然有所不同;看起来 Tim N 的包正在添加额外的句点,但谁知道它是在第一阶段还是第二阶段?甚至在\thefigure它本身?根据发生的位置,您需要不同的解决方法:

  • 如果有人错误地将其定义\thefigure为包含一个额外的句点,而您知道数字的其余部分应该是什么样子,那么您可以重新定义它。由于没有办法吞噬以前的字符,如果下面的解决方案对您不起作用,那么您应该尝试这个。

  • 如果\fnum@figure以某种方式在 的值后面加上一个句号\thefigure,那么在某些情况下您可以使用 将其删除\?。例如,如果他们修改了默认article定义(见下文),那么将其放在\?后面\thefigure即可。但是,如果他们使用某种巧妙的装置生成句号,那么您必须同样聪明才能解开它。

该定义如下:

% The default def'n doesn't have the period
\def\fnum@figure{\figurename\nobreakspace\thefigure.}
  • 最后,假设在 中插入句点\@makecaption。那么你可能能够用 捕获它\?,但前提是生成“数字”的命令按原样放入,而不是先完全展开。这是课堂上的情况article,我们希望,无论您的情况如何,也是如此。

因此,看起来目标是坚持\?下去\thefigure 因为它只出现\fnum@figure。您想修补命令,有几种方法可以实现这一点,但该etoolbox软件包通常很有用,所以我会使用它。请参阅以下最小文档:

\documentclass{article}
% Cute but not necessary here:
% \def\?#1{}

% BAD:
% \renewcommand\thefigure{\arabic{figure}\?}

% GOOD:
\usepackage{etoolbox}
\makeatletter
\patchcmd\fnum@figure{\thefigure}{\thefigure\@gobble}{}{}
\makeatother

\begin{document}
 \begin{figure}
  \caption{A figure}
 \end{figure}
\end{document}

既然我们无论如何都要这样做,我想Yiannis 指出的\makeatletter内部命令可能是更明智的做法,但如果你把它放在普通文本中就更好了。\@gobble\?

答案2

您可以尝试以下操作:

\newcommand*\swallow[1]{}

它只是消耗了它的参数但并不使用它。

相关内容