Unicode 字符串中的字符替换

Unicode 字符串中的字符替换

·我需要一个命令来替换(删除)字符串中的字符|

考虑以下简单的代码:

\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}

在此处输入图片描述

相关内容