如何用换行符替换字符?

如何用换行符替换字符?

xstring:我想要这样的东西\StrSubstitute{abc,cde}{,}{\newline},但它不起作用。

答案1

这有效:

\documentclass{article}
\usepackage{xstring}

\begin{document}

\noindent
\StrSubstitute{abc,def}{,}{\noexpand\noexpand\noexpand\newline}

\end{document}

答案2

xstring包裹 文档提到这一点(部分3.1.1 命令\fullexpandarg\expandarg\noexpandarg):

默认情况下会调用该命令,因此在宏对其起作用之前,\fullexpandarg所有参数都会完全展开(使用)。在大多数情况下,这种展开模式可以避免链式展开并允许更轻量的代码。当然,可以取消参数的展开,以使用命令或恢复 TeX 的通常行为。\edef\expandafter\noexpandarg\normalexpandarg

在下面的列表中,[...] 紫色的参数可能会根据扩展模式进行扩展:

在此处输入图片描述

您放置\newline在 中<stringB>,这在尝试扩展时会导致问题。\normalexpandarg加载后添加xstring有效:

在此处输入图片描述

\documentclass{article}

\usepackage{xstring}
\normalexpandarg

\begin{document}

\StrSubstitute{abc,cde}{,}{;}

\StrSubstitute{abc,cde}{,}{\newline}

\end{document}

答案3

一种listofitems方法

限制:分隔符不能在组内解析(即逗号不能在参数内\textbf并转换为换行符)

\documentclass{article}
\usepackage{listofitems}
\newcommand\subnewlines[2]{%
  \setsepchar{#1}%
  \readlist\parsethis{#2}%
  \foreachitem\z\in\parsethis[]{%
    \ifnum\zcnt=1\relax\else\newline\fi
    \z
  }%
}
\begin{document}
\subnewlines{,}{abc,def,a test of \textbf{big}, proportions}
\end{document}

在此处输入图片描述


一种tokcycle方法

这种方法独特的它允许在组内使用分隔符,而不会丢失功能:

\documentclass{article}
\usepackage{tokcycle}
\newcommand\subnewlines[2]{%
  \tokcycle
  {\ifx##1#1\addcytoks{\newline}\else\addcytoks{##1}\fi}
  {\processtoks{##1}}
  {\addcytoks{##1}}
  {\addcytoks{##1}}
  {#2}%
  \the\cytoks%
}
\begin{document}
\subnewlines{,}{abc,def,a test of \textbf{big,ly} proportions}
\end{document}

在此处输入图片描述

答案4

使用expl3xparse

\documentclass[]{article}

\usepackage{xparse} % also loads expl3

\ExplSyntaxOn
\tl_new:N \l__schneider_substitute_tl
\cs_new_protected:Npn \schneider_substitute:nnn #1 #2 #3
  {
    \tl_set:Nn \l__schneider_substitute_tl { #1 }
    \tl_replace_all:Nnn \l__schneider_substitute_tl { #2 } { #3 }
    \l__schneider_substitute_tl
  }
\NewDocumentCommand \substitute { +m +m +m }
  {
    \schneider_substitute:nnn { #1 } { #2 } { #3 }
  }
\ExplSyntaxOff

\begin{document}
\substitute{abc,cde}{,}{\newline}
\end{document}

在此处输入图片描述

相关内容