我正在使用 stringstrings 包。它有一个名为 \gobblechar 的命令,可以删除字符串或标记中的第一个字符。请参阅下面的 MWE。
\documentclass{article}
\usepackage{stringstrings}
\begin{document}
\def\myAnyString{\gobblechar{v}{Any String}}
\myAnyString
\end{document}
我期望“任何字符串”的第一个字符将被删除。因此,我期望的输出\myAnyString
将是ny String
。
然而输出依然是Any String
。
在文档中,它说的结果\gobblechar
是 \def'ed,而不是 \edef'ed。目前我不确定这是否相关,但我知道它非常重要。
我认为我的 MWE 中没有发生宏扩展。但由于我已经给出/执行了命令\myAnyString
,因此它一定已经扩展了。然而,似乎还没有。
还有其他包可以完成这项工作,例如 xstring 包中的 \StrGobbleLeft,但如果参数包含命令(例如,如果Any String
变为\textbf{Any String}
),\StrGobbleLeft
则会失败。但\gobblechar{v}{\textbf{Any String}}
仍然可以工作,但其输出仍然Any String
只是粗体,但第一个字符仍然不会被删除。
请寻求您的帮助。
答案1
您误解了它的v
用途:
\gobblechar[v]{Any String}
会输出“ny String”,但\gobblechar{v}
不会输出任何内容。请注意使用方括号而不是花括号。and[v]
可以省略。
然而,你\def
的不是设置\myAnyString
为ny String
。为此,您需要
\gobblechar[q]{Any String}\edef\myAnyString{\thestring}
但请注意,空格将变成\
(反斜杠空格)。
由于不太清楚你的目的是什么,我无法透露更多信息。