是否存在一个命令可以忽略后面的字符,就像\^
在后面的字符上戴帽子一样?
答案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]{}
它只是消耗了它的参数但并不使用它。