使用 \StrSubstitute 替换无效

使用 \StrSubstitute 替换无效

我在使用 替换字符串时遇到了问题\StrSubstitute。我理解函数的方式是,根据文档(第 7/8 页),它应该使用三个参数。它应该在文本中搜索第一个参数,然后用第三个参数替换第一个参数中的第二个参数。

\documentclass[12pt]{scrartcl}
\usepackage{xstring}

\begin{document}
\StrSubstitute{abcde}{d}{D}

blablabla
abcde

\input{mwe2}

cdeba

\end{document}

输入文件mwe2.tex只是

abcde

abcde

12345

然而,在PDF文件中的结果只是:

ABCDE

啦啦啦

ABCDE

ABCDE

ABCDE

12345

基德巴

即软件将字符串abcde放在命令的位置\StrSubstitute,然后d用此处替换,但忽略文档中其他任何地方的D字符串。abcde

有人能帮忙吗?祝好,玛丽

答案1

\StrSubstitute仅对第一个参数内容起作用,即它是一次性替换。除非源字符串出现在第一个参数中,否则将忽略后续出现的源字符串。\StrSubstitute如果源字符串包含在宏中,例如,则的可用性会得到改善\newcommand{\foo}{abcde}

\StrSubstitute{\input{mwe2}{...}{...}由于扩展问题,无法工作。

我尝试使用该l3regex包(第一次),对于简单的正则表达式来说它相当容易(abcde很简单 ;-)

\SearchAndReplace宏打开文件mwe2.tex并用 替换出现的abcde(但是,如果de`abcDe之间有换行符,我认为它不起作用) 。abc and

\documentclass[12pt]{scrartcl}
\usepackage{xstring}

\usepackage{xparse}
\usepackage{l3regex}

\ExplSyntaxOn
\ior_new:N \l_marie_input_stream 
\NewDocumentCommand{\SearchAndReplace}{mmm}{%
  \ior_open:Nn \l_marie_input_stream {#1}% Open the file
  \ior_map_inline:Nn \l_marie_input_stream {% Read line by line
    \tl_set:Nn \l_tmpa_tl {##1}% Store the line 
    \regex_replace_all:nnN {#2} {#3} \l_tmpa_tl % Replace #2 by #3
    \tl_use:N \l_tmpa_tl % Display the (modified) line content
  }
  \ior_close:N \l_marie_input_stream % close the file
}
\ExplSyntaxOff


\begin{document}

With \verb!\StrSubstitute!

\StrSubstitute{abcde}{d}{D}

blablabla
abcde

Now with \verb!\SearchAndReplace!

\SearchAndReplace{mew2.tex}{abcde}{abcDe}

cdeba

\end{document}

这是mew2.tex

abcde abcde

abcde

12345

输出结果如下:

在此处输入图片描述

相关内容