LaTeX mbox на список
Есть: строка, разделенная запятыми.
Надо: завернуть каждый элемент отдельно в функцию (например, в \mbox) и собрать строку обратно, возможно с другими разделителями.
\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 Есть какое-то решение на классическом синтаксисе:
\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}, }