本例中如何使用 { 和 } 作为分隔符而不是活动字符

本例中如何使用 { 和 } 作为分隔符而不是活动字符

在此示例中,如何使用 { 和 } 作为分隔符而不是活动字符?

我想要 [360] [90] [7,2] 作为foreach 命令的输出而不是这样。

我需要一个兼容的字符串foreach;因为参数包含逗号小数分隔符。

在此处输入图片描述

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{tikz,xstring}

\begin{document}

\StrSubstitute{360;90;7,2}{;}{\},\{}[\ListeA]
\xdef\ListeA{\{\ListeA\}}

\ListeA

\foreach \x in \ListeA {[\x] }

\end{document}

答案1

这将产生所需的输出

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\def\foo#1{\xfoo#1;\relax;}
\def\xfoo#1;{\ifx\relax#1\else\xxfoo{#1}\expandafter\xfoo\fi}
\newcommand\xxfoo[1]{[#1]}
\begin{document}

\foo{360;90;7,2}

\end{document}

如果您坚持使用,\foreach您可以在第一个循环中构造一个列表来循环,\foreach但这是完全没有意义的,您在主体中所做的任何事情\foreach都可以在第一个循环中完成。

这次与法国巴贝尔;

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{tikz}
\begin{document}


\def\foo#1{\expandafter\expandafter\expandafter\zfoo\xfoo#1;\relax;}
\def\xfoo#1;{\ifx\relax#1\else,{#1}\expandafter\xfoo\fi}
\def\zfoo#1{}

\edef\zz{\foo{360;90;7,2}}

\foreach\x in \zz{
This is [\x]

}

\end{document}

答案2

这是一个解决方案expl3

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\addbrackets}{ m }
 {
  \tarass_addbrackets:n { #1 }
 }

\seq_new:N \l__tarass_addbrackets_seq

\cs_new_protected:Npn \tarass_addbrackets:n #1
 {
  \seq_set_split:Nnn \l__tarass_addbrackets_seq { ; } { #1 }
  [\seq_use:Nn \l__tarass_addbrackets_seq {]~[}]
 }
\ExplSyntaxOff

\begin{document}
\addbrackets{360;90;7,2}
\end{document}

可以进行多种改进。

在此处输入图片描述

如果您正在使用法语模块babel,那么您必须意识到它;是一个特殊字符,因为法语有在分号前留空格的特殊习惯。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{xparse}

\ExplSyntaxOn
\shorthandon{;}
\NewDocumentCommand{\addbrackets}{ m }
 {
  \tarass_addbrackets:n { #1 }
 }

\seq_new:N \l__tarass_addbrackets_seq

\cs_new_protected:Npn \tarass_addbrackets:n #1
 {
  \seq_set_split:Nnn \l__tarass_addbrackets_seq { ; } { #1 }
  [\seq_use:Nn \l__tarass_addbrackets_seq {]~[}]
 }
\shorthandoff{;}
\ExplSyntaxOff

\begin{document}
\addbrackets{360;90;7,2}
\end{document}

相关内容