Lista de análisis del carácter de espacio ascii

Lista de análisis del carácter de espacio ascii

He estado usando la funcionalidad de análisis de listas de etoolbox y tengo un caso de uso extraño en el que quiero una lista separada por espacios.

\usepackage{etoolbox}
\DeclareListParser*{\symbolListParser}{<symbol for space character>}
\newcommand{\processSymbolList}[1]{
    \symbolListParser{}{#1}
}

No estoy seguro de por dónde empezar a buscar. He husmeado durante un tiempo buscando documentación sobre listas, documentación sobre espacio y documentación sobre caracteres ascii sin éxito.

Entonces, si alguien pudiera decirme cómo hacerlo, dónde buscar o si no es posible, se lo agradecería mucho.

ACTUALIZAR:encontréestepero estaba buscando algo un poco más limpio como lo que quería el OP

ACTUALIZACIÓN2:Gracias a Tobi por la respuesta. Lo he aceptado. a continuación se muestra una versión más general de spacelist que se comporta más como el analizador de listas

\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{ \spacelist }{ mm }{
    \seq_set_split:Nnn \l_tmpa_seq { ~ } { #2 }
    \seq_map_inline:Nn \l_tmpa_seq {
        #1{##1}
    }
}

\ExplSyntaxOff

% to use you would write it like:
\spacelist{\fbox}{Boxes and Spaces in a List}

Respuesta1

He aquí un enfoque que utilizaexpl3

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{ \spacelist }{ m }{
   \seq_set_split:Nnn \l_tmpa_seq { ~ } { #1 }
   \seq_map_inline:Nn \l_tmpa_seq {
      \fbox { ##1 }
   }
}

\ExplSyntaxOff

\begin{document}
List: \spacelist{Boxes and Spaces in a List}
\end{document}

El código utiliza los llamadossecuenciasque se genera dividiendo el Argumento #1de \spacelisten espacios, que están ~en la nueva sintaxis*, mientras que los espacios normales se ignoran. Las lentejuelas se almacenan en una variable local temporalmente denominada \l_tempa_seqy con ella \seq_map_inlinepodemos iterar a través de todos los elementos de la secuencia. El elemento actual se proporciona como código de argumento #1, aquí se ##1debe a que el mapeo está anidado dentro de una definición.

Puede reemplazar la \fboxpieza para que se ajuste a sus necesidades...


*nueva sintaxissignifica la sintaxis introducida con LaTeX3 que actualmente está disponible como expl3paquete, que se carga mediante xparse. Para saber más consulta el manual de expl3o source3.

Respuesta2

El listofitemspaquete puede proporcionarlo, ya sea en forma renderizada o detokenizada:

\documentclass{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{listofitems}
\newcommand\spacelist[2][]{
  \setsepchar{ }%
  \readlist\mylist{#2}%
  \showitems#1\mylist%
}
\begin{document}
List: \spacelist{Boxes and \textbf{Spaces} in a List}

Tokens: \spacelist[*]{Boxes and \textbf{Spaces} in a List}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta3

Puede escribir en dos líneas de macros TeX un enfoque sin paquete para su objetivo.

\documentclass{article}

\catcode`z 3
\makeatletter
\newcommand\spacelist[1]{\spacelist@boxit #1 {z} }%
\long\def\spacelist@boxit #1 {\ifx z#1\relax\else
         \fbox{#1}\expandafter\spacelist@boxit\fi}
\catcode`z 11
\makeatother

\begin{document}
List: \spacelist{Boxes and Spaces in a List}
\end{document}

Admisión de culpa: el método es frágil si la lista analizada contiene \elsetokens \fi.

ingrese la descripción de la imagen aquí

Aquí hay una forma más sólida aún con medios simples. Pero el argumento no debe contener catcode 3 letras Z...

\documentclass{article}
\usepackage[T1]{fontenc}

\catcode`Z 3
\makeatletter
\newcommand\spacelist[1]{\spacelist@getone{}#1 Z }%
\long\def\spacelist@getone #1 {\spacelist@check #1.Z\spacelist@check{#1}}%
\long\def\spacelist@check  #1Z#2\spacelist@check#3%
        {\if\relax\detokenize{#1}\relax
         \expandafter\@gobbletwo % abort parse
         \else
%
% #3 contains the searched for item, but with an empty brace pair
% added, which serves to prevent brace removal in processing
% so I am showing here how to remove it with \expandafter/\@gobble
% initial braces are not lost.
% 
         \fbox{\detokenize\expandafter{\@gobble#3}}%
         \fi
         \spacelist@getone{}}%
\catcode`Z 11
\makeatother

\begin{document}
List: \spacelist{Boxes {and Spaces} in a {List with \if, \else, \end tokens}}

\end{document}

ingrese la descripción de la imagen aquí

información relacionada