无法进行替代

无法进行替代

我想要一个命令用包中的命令\myreplace替换所有实例。(事实上,这是命令执行的操作之一,但由于与此事无关的原因,我无法使用该特定命令。)因此,我运行代码。:\textlengthmarktipatipa\textipa

\documentclass{memoir}

\usepackage{xstring,tipa}

\newcommand*\myreplace[1]{\StrSubstitute{#1}{:}{\textlengthmark}}

\begin{document}

\myreplace{gaga:}

\end{document}

然而我得到的只是

TeX 容量超出,抱歉 [输入堆栈大小=5000] \myreplace{gaga:}

这似乎与命令有关\textlengthmark,因为用任何其他字符串替换它都可以。

有人能发现错误吗?

答案1

xstring这是默认情况下尝试全面扩展其参数的常见问题。

\documentclass{memoir}

\usepackage{xstring,tipa}

\newcommand*\myreplace[1]{%
  \saveexpandmode\noexpandarg
  \StrSubstitute{#1}{:}{\textlengthmark}%
  \restoreexpandmode}

\begin{document}

\myreplace{gaga:}

\end{document}

如果您不需要使用xstring具有不同“扩展模式”设置的命令,只需发出命令\noexpandarg然后\usepackage{xstring}忘记它,因为您的版本将会起作用。

答案2

一种stringstrings方法:

\documentclass{memoir}
\usepackage{stringstrings,tipa}
\makeatletter
\newcommand*\myreplace[1]{%
  \encodetoken{\textlengthmark}%
  \convertchar[e]{#1}{:}{\textlengthmark}%
  \retokenize{\thestring}%
  \protected@edef\xyz{\thestring}%
  \decodetoken{\textlengthmark}%
  \xyz
}
\makeatother
\begin{document}
\myreplace{gaga:} 
\end{document}

相关内容