上下文:我在一个也使用 KaTeX 的平台上使用 Maxima。由于与内容管理相关的各种原因,这意味着我们经常使用 Maxima 函数来生成必要的 KaTeX 命令。
我目前正在尝试开发一组函数,这些函数将有助于为与向量相关的各种符号生成与 KaTeX 命令相对应的不同字符串集。
问题
我编写了以下函数makeKatexVector(x),它接受一个字符串、列表或列表列表并返回相同类型的对象,每个字符串都包含在其中\vec{}(即makeKatexVector(字符串)返回\vec{字符串},makeKatexVector(["a ","b"])返回["\vec{a }", "\vec{b}"] 等)。
/* Flexible Make KaTeX Vector Version of List Items */
makeKatexVector(x):= block([ placeHolderList : x ],
if stringp(x) /* Special Handling if x is Just a String */
then placeHolderList : concat("\vec{", x, "}")
else if listp(x[1]) /* check to see if it is a list of lists */
then for j:1 thru length(x)
do placeHolderList[j] : makelist(concat("\vec{", k ,"}"), k, x[j] )
else if listp(x) /* check to see if it is just a list */
then placeHolderList : makelist(concat("\vec{", k, "}"), k, x)
else placeHolderList : "makeKatexVector error: not a list-of-lists, a list or a string",
return(placeHolderList));
尽管我对上述代码的效率或优雅性表示怀疑,但它似乎返回了所需的表达式;但是,我想修改此函数,以便它可以区分单字符串和多字符串。
特别是,我希望多字符串 likex_1以\vec{x}_1和not \vec{x_1}的形式返回。
事实上,我只是想修改上面的代码,使其\vec{}包裹在字符串的第一个字符周围,而不管可能有多少个字符。
我的尝试
我已经准备好用蛮力解决这个问题(例如,将字符串的每个字符转录成一个列表,然后重新组装);但是,该项目的真正程序员建议我研究“正则表达式”。在探索了那个无尽的兔子洞之后,我找到了命令regex_subst;但是,我找不到任何 Maxima 文档,并且正在努力重现此处相关文档中的示例。
一旦我可以计算出要使用的适当正则表达式,我打算在上面的代码中使用一个if语句来实现它,例如:
if slength(x) >1
then {regex command}
else {regular treatment}
如果有人知道这些方面的有用资源,我将非常感谢任何指针。