我在工作中使用了几种不同的演算(编程语言),并且试图定义一个工具来通过用适当的符号替换文本来简化我的符号;到目前为止,我一直在使用以下代码(使用 tikz 的foreach
):
\newcommand{\format}[2]{%
\def\myformula{#1}%
\foreach \myfrom/\myto in {#2}%
{%
\StrSubstitute{\myformula}{\myfrom}{\myto}[\mytmp]%
\global\let\myformula\mytmp%
}%
\myformula%
}
有几个命令似乎与此不兼容。例如,如果我尝试写入:
$\format{k<xs>}{</\langle,>/\rangle,xs/\vec{x}}$
我收到以下错误:
Illegal parameter number in definition of \xs_arg_iv.
这似乎在简单地尝试使用\vec
inside时出现\StrSubstitute
。以下导致相同的问题:
$\StrSubstitute{k\langle xs\rangle}{xs}{\vec{x}}[\mytmp]$
这里出了什么问题,我该如何解决?另外,有没有更简单的方法来实现我所尝试的(为微积分提供一个简化的 ASCII 符号)?我应该注意到,类似正则表达式的替换是理想的,但我找不到如何做到这一点(当然,除非我使用 LuaTeX)。
编辑:
正如评论中所建议的,我尝试制作一个最小的工作示例。它如下:
\documentclass{article}
\usepackage{xstring}
\usepackage{tikz}
\usepackage{MnSymbol}
\usepackage{accents}
\newcommand{\format}[2]{%
\def\myformula{#1}%
\foreach \myfrom/\myto in {#2}%
{%
\StrSubstitute{\myformula}{\myfrom}{\myto}[\mytmp]%
\global\let\myformula\mytmp%
}%
\myformula%
}
\title{Test}
\begin{document}
\maketitle
Test: $\format{k<xs>}{</\langle,>/\rangle,xs/\vec{x}}$
\end{document}
看起来,如果没有MnSymbol
和accents
,一切都会按预期进行。如果只是添加MnSymbol
(但没有accents
),它甚至不会编译。如果添加 (或仅添加accents
,而不添加MnSymbol
),问题就会出现,并且它会编译,但会出现错误。