从字符串中删除反斜杠

从字符串中删除反斜杠

我正在定义一个新命令,其中输入包含反斜杠,稍后会将其删除,因此我正在寻找一种方法来实现这一点。以下示例在反斜杠位于字符串前面时会将其删除,但当反斜杠位于字符串中间时会失败。

\documentclass{article}
\makeatletter
\newcommand{\removeabs}[1]{%
  \ifcat\relax\noexpand#1%
    \expandafter\expandafter\expandafter\@gobble\expandafter\string
  \fi
  #1%
}
\makeatother
\begin{document}
\removeabs{\the slash is removed here}
\removeabs{but not \here}
\end{document}

有人知道如何删除反斜杠吗,即使它位于字符串之间?

为什么我需要这个:我正在使用 pythontex 创建文件.tex,将被纳入主文本,并且两个步骤都使用一个新命令完成,形式为\命令{参数},其中参数参数是python代码中使用的选项,以及创建的tex文件的名称(文件.tex)问题在于参数包含斜线、连字符等(在我的情况下很常见),在 Windows 操作系统中甚至不允许将其作为文件名,因此需要在 pythontex 代码(以另存为文件)和 latex(以读取文件)中将其删除。例如:

\newcommand{\mycommand}[1]{
\begin{pycode}
plot[#1] %Pseudo line
save[#1.tex] %Pseudo line
\end{pycode}
\input{#1.tex}}

答案1

\documentclass{article}
\newcommand{\removeabs}[1]{%
  %{\catcode92=9 \endlinechar-1 \scantokens\expandafter{\detokenize{#1}}}%
  {\catcode92=9 \endlinechar-1 \scantokens{#1}}%
}
\begin{document}
\removeabs{\the slash is removed here}
\removeabs{and also \here}+++
\end{document}

但您的用例并不为人所知......

在此处输入图片描述

正如@A.Ellett 指出的那样,没有必要\detokenize

\documentclass{article}
\newcommand{\removeabs}[1]{%
  {\catcode92=9 \endlinechar-1 \scantokens{#1}}%
}
\begin{document}
\removeabs{\the slash $E=mc^2$ is removed here}
\removeabs{and also \here}+++
\end{document}

在此处输入图片描述

也许您想存储在宏中,下面显示了如何做到这一点(但\x这里使用并丢弃)。

但请注意,其中不应包含一些与 不兼容定义的活动字符\edef。UTF ~-8 编码没问题。

\documentclass{article}
\usepackage[T1]{fontenc}
\newcommand{\removeabs}[1]{%
  {\catcode92=9 \endlinechar-1 \everyeof{\noexpand}\edef\x{\scantokens{#1}}\x}%
}
\begin{document}
\removeabs{\the slash $E=mc^2$ is~~~~removed here}
\removeabs{and also éééé \here}+++
\end{document}

在此处输入图片描述

感谢@A.Ellett!

答案2

expl3

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\removebs}{m}
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  \regex_replace_all:nnN { \cC. } { \c{cs_to_str:N} \0 } \l_tmpa_tl
  \tl_use:N \l_tmpa_tl
 }

\ExplSyntaxOff

\begin{document}

\removebs{\the slash is removed here}

\removebs{\the\ slashes are removed here}

\removebs{and also \here}

\end{document}

请注意,第一种情况下后面的空格\the不会消失,因为它一开始就被忽略了。

在此处输入图片描述

相关内容