<!--
.. title: LaTeX mbox на список
.. slug: latex-mbox
.. date: 2025-10-19 23:47:17 UTC+03:00
.. tags: LaTeX 
.. category: 
.. link: 
.. description: 
.. type: text
-->

Есть: строка, разделенная запятыми. 

Надо: завернуть каждый элемент отдельно в функцию (например, в *\mbox*) и
собрать строку обратно, возможно с другими разделителями.

```latex
\ExplSyntaxOn

\NewDocumentCommand{\MBoxingList}{O{,\ }m}
{
  \seq_clear_new:N \l__in_seq
  \seq_set_from_clist:Nn \l__in_seq {#2}
  \seq_set_map:NNn \l__in_seq \l__in_seq {\mbox{##1}}
  \seq_use:Nn \l__in_seq {#1}
%  \quad\seq_count:N \l__in_seq
}

\ExplSyntaxOff
```

Использовать так: `\expanded{\MBoxingList[, ]{123, 123, 5234, 6543}}

Как вариант определить через `\NewExpandableDocumentCommand`, но тогда
вызывать без `\expanded` и могут быть сюрпризы если исходная строка передается
не явно, а определена командой.

P.S. Вроде и работает, но с этим expansion что-нибудь да не нравится. 
В общем, глаз да глаз.

P.P.S. Можно попробовать через пакет `listofitems`.

P.P.P.S Есть какое-то решение на классическом синтаксисе:

```latex

\makeatletter

% Functional foreach construct
% #1 - Function to call on each comma-separated item in #3
% #2 - Parameter to pass to function in #1 as first parameter
% #3 - Comma-separated list of items to pass as second parameter to function #1
\def\foreach#1#2#3{%
  \@test@foreach{#1}{#2}#3,\@end@token%
}

% Internal helper function - Eats one input
\def\@swallow#1{}

% Internal helper function - Checks the next character after #1 and #2 and
% continues loop iteration if \@end@token is not found
\def\@test@foreach#1#2{%
  \@ifnextchar\@end@token%
    {\@swallow}%
    {\@foreach{#1}{#2}}%
}

% Internal helper function - Calls #1{#2}{#3} and recurses
% The magic of splitting the third parameter occurs in the pattern matching of the \def
\def\@foreach#1#2#3,#4\@end@token{%
  #1{#2}{#3}%
  \@test@foreach{#1}{#2}#4\@end@token%
}

\makeatother

%% Функция для использования
\def\makembox#1#2{\mbox{#2}, }
```
