Liste Analysieren des ASCII-Leerzeichens

Liste Analysieren des ASCII-Leerzeichens

Ich habe die Listenanalysefunktion von etoolbox verwendet und habe einen seltsamen Anwendungsfall, in dem ich eine durch Leerzeichen getrennte Liste möchte.

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

Ich bin mir nicht sicher, wo ich überhaupt mit der Suche beginnen soll. Ich habe eine Weile in der Dokumentation zu Listen, in der Dokumentation zu Speicherplatz und in der Dokumentation zu ASCII-Zeichen herumgestöbert, aber ohne Erfolg.

Ich wäre also sehr dankbar, wenn mir jemand sagen könnte, wie das geht, wo ich suchen muss oder dass es nicht möglich ist.

AKTUALISIEREN:Ich fandDasaber ich suchte nach etwas Saubererem, so wie das, was der OP wollte

UPDATE2:Danke an Tobi für die Antwort. Ich habe sie akzeptiert. Unten ist eine allgemeinere Version von Spacelist, die sich mehr wie der Listenparser verhält

\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}

Antwort1

Hier ist ein Ansatz mitexpl3

\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}

Der Code verwendet sog.Sequenzen#1welches durch Aufteilen des Arguments von \spacelistLeerzeichen erzeugt wird , die ~in der neuen Syntax* stehen, während normale Leerzeichen ignoriert werden. Die Pailletten werden in einer lokalen, temporären Variable namens gespeichert \l_tempa_seqund mit \seq_map_inlinekönnen wir durch alle Elemente der Sequenz iterieren. Das aktuelle Element wird als Argumentcode angegeben #1, hier ist es, ##1weil die Zuordnung in einer Definition verschachtelt ist.

Sie können das \fboxTeil entsprechend Ihren Anforderungen austauschen …


*neue Syntaxbedeutet die mit LaTeX3 eingeführte Syntax, die derzeit als expl3gepackte Version verfügbar ist und von geladen wird xparse. Weitere Informationen finden Sie im Handbuch von expl3oder source3.

Antwort2

Das listofitemsPaket kann es entweder in gerenderter oder detokenisierter Form bereitstellen:

\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}

Bildbeschreibung hier eingeben

Antwort3

Sie können in zwei Zeilen TeX-Makros einen paketfreien Ansatz für Ihr Ziel schreiben.

\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}

Schuldeingeständnis: Die Methode ist instabil, wenn die analysierte Liste \elseoder \fiToken enthält.

Bildbeschreibung hier eingeben

Hier ist ein robusterer Weg mit einfachen Mitteln. Das Argument sollte jedoch nicht den Catcode 3 Buchstaben Z enthalten ...

\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}

Bildbeschreibung hier eingeben

verwandte Informationen