替换包含反斜杠的字符串

替换包含反斜杠的字符串

我需要创建一个函数来转换字符串,例如:

Hello\textbackslash{}Bye

变成这样:

Hello \\ Bye

我尝试过使用StrSubstitute(来自xstring包)但没有成功。我尝试过以下方法:

\newcommand{\TRANSFORM}[1]{\StrSubstitute{#1}{\textbackslash{}}{ \noexpand\\ }}

\TRANSFORM{Hello\textbackslash{}Bye}

答案1

您可以暂时重新定义 的含义\textbackslash,让它\\

在此处输入图片描述

\documentclass{article}

\newcommand{\TRANSFORM}[1]{{\let\textbackslash\\#1}}
\setlength{\parindent}{0pt}% Just for this example

\begin{document}

Hello\textbackslash{}Bye

\TRANSFORM{Hello\textbackslash{}Bye}

\end{document}

答案2

您需要使用\noexpandarg的模式xstring,这样它就不会尝试扩展其参数:

\documentclass{article}
\usepackage{xstring}

%\noexpandarg % set \noexpandarg globally

\newcommand{\TRANSFORM}[1]{%
  \saveexpandmode\noexpandarg % set \noexpandarg locally
  \StrSubstitute{#1}{\textbackslash{}}{\\}%
  \restoreexpandmode % restore the previous mode
}

\begin{document}

\TRANSFORM{Hello\textbackslash{}Bye}

\end{document}

根据您的使用情况xstring,您也可以进行\noexpandarg全局设置(通过注释/取消注释相关行)。

当然,在这种情况下,重新定义一个宏更好:

\newcommand\TRANSFORM[1]{{% open a group
   \renewcommand{\textbackslash}[1]{\\}%
   #1%
}}

为何\renewcommand又不呢\let?因为这个重新定义也吞噬了{}

相关内容