·
我需要一个命令来替换(删除)字符串中的字符|
。
考虑以下简单的代码:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{stringstrings}
\newcommand\mycommand[1]{%
\convertchar[q]{#1} {·}{}%
\convertchar[v]{\thestring}{|}{}}
\begin{document}
\mycommand{foo·bar|baz}
\end{document}
它给出了一个stack exceeded
错误;我认为原因是 的出现·
被传递\IeC {\textperiodcentered }
为\convertchar
。
此外, 的替换|
不起作用。我认为这是由于 手册中建议的字体编码造成的stringstrings
。
摆弄\unexpanded
却\detokenize
一无所获:我不太明白发生了什么,所以我把事情弄得一团糟。
编写这样的命令的最佳方法是什么?为什么?
(使用的实现xstring
同样受到欢迎;我尝试过,获得了基本相同的结果。)
答案1
问题是,据我所知,stringstrings
尝试扩展并且这·
是一个双字节字符。
我的建议是expl3
,但\tl_remove_all:Nn
不要试图扩张。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand\mycommand{m}
{
\tl_set:Nn \l_tmpa_tl { #1 }
\tl_remove_all:Nn \l_tmpa_tl { · }
\tl_remove_all:Nn \l_tmpa_tl { | }
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\mycommand{foo·bar|baz}
\end{document}