如何从字符串替换中排除数学环境?

如何从字符串替换中排除数学环境?

我想要一个命令,将另一个命令应用于输入的每一行。我的方法是以下简单的字符串替换:

\documentclass{article}

\usepackage{xstring,xparse}

\DeclareDocumentCommand{\applySomeFormatting}{o}
{
    This line (#1) has been formatted successfully.
}

\DeclareDocumentCommand{\applySomeFormattingToEachLine}{m}
{
    \noexpandarg
    \StrSubstitute{\applySomeFormatting[#1]}{\\}{]\\\applySomeFormatting[}
}

\begin{document}
    \applySomeFormattingToEachLine{First line\\Second line\\Third line}
\end{document}

这基本上是可行的,除非其中一行有多行数学环境,因为该命令不能应用于数学环境内的行。有人知道如何将这些数学环境排除在替换之外吗?

答案1

{}您可以在数学周围添加一对,这可以防止\\被字符串替换所取代。

然而,我不太确定这是否确实是您想要的。

\documentclass{article}
\usepackage{mathtools}
\usepackage{xstring,xparse}

\DeclareDocumentCommand{\applySomeFormatting}{o}
{
    This line (#1) has been formatted successfully.
}

\DeclareDocumentCommand{\applySomeFormattingToEachLine}{m}
{
    \noexpandarg
    \StrSubstitute{\applySomeFormatting[#1]}{\\}{]\\\applySomeFormatting[}
}

\begin{document}
    \applySomeFormattingToEachLine{First line\\Second line\\Third line}

\bigskip    

My attempt:
    \applySomeFormattingToEachLine{Introduce some math:%
     {\begin{align}
    1+2=3\\
    3+4=7
\end{align}}\\ pure text }
\end{document}

相关内容