Gesucht wird ein Befehl, der mit Hilfe von expl3 alle Leerzeichen durch einen Schrägstrich ersetzt (vgl. Antwort von Clemens auf diese Frage) und außerdem alle Klein- durch Großbuchstaben ersetzt. Expl3 bietet den Befehl \tl_to_uppercase an, jedoch ist es mir nicht gelungen, diesen praktisch anzuwenden.

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{expl3,xparse}
\ExplSyntaxOn
\cs_new_protected:Npn \cletus_replace:n #1
  {
    \tl_set:Nn \l_tmpa_tl {#1}
    \tl_replace_all:Nnn \l_tmpa_tl {ß} {ss}
    \tl_replace_all:Nnn \l_tmpa_tl {~} {/\linebreak[0]}
    % Hier muss jetzt jeder Klein- durch den entsprechenden Großbuchstaben ersetzt werden.
    \tl_use:N \l_tmpa_tl
  }

\NewDocumentCommand \MeinBefehl {m}
  { \cletus_replace:n {#1} }
\ExplSyntaxOff

\begin{document}

\MeinBefehl{aus klein mach groß}

\end{document}

Die gewünschte Ausgabe wäre in diesem Fall »AUS/KLEIN/MACH/GROSS«.

gefragt 08 Jan, 17:19

Cletus's gravatar image

Cletus
995126
Akzeptiert: 71%

bearbeitet 09 Jan, 08:22

Clemens's gravatar image

Clemens
19.0k112960


\tl_to_uppercase:n und \tl_to_lowercase:n existieren zwar, sind aber nicht (mehr) dafür gedacht, Groß- und Kleinschreibung zu manipulieren, und werden gerüchteweise auch aus expl3 entfernt werden. Dafür gibt es

  • \tl_upper_case:n,
  • \tl_lower_case:n und
  • \tl_mixed_case:n.

Beschrieben werden sie in interface3 im Abschnitt l3candidates/Additions to l3tl. Wichtig zu wissen: sie expandieren ihr Argument!

Open in Online-Editor
\cs_new_protected:Npn \cletus_replace:n #1
  {
    \tl_set:Nn \l_tmpa_tl {#1}
    \tl_replace_all:Nnn \l_tmpa_tl {ß} {ss}
    \tl_replace_all:Nnn \l_tmpa_tl {~} {/}
    % Hier muss jetzt jeder Klein- durch den entsprechenden Großbuchstaben ersetzt werden.
    \tl_upper_case:n { \l_tmpa_tl }
  }

oder eventuell mit V-Argument (was ich persönlich bevorzugen würde):

Open in Online-Editor
\cs_new_protected:Npn \cletus_replace:n #1
  {
    \tl_set:Nn \l_tmpa_tl {#1}
    \tl_replace_all:Nnn \l_tmpa_tl {ß} {ss}
    \tl_replace_all:Nnn \l_tmpa_tl {~} {/}
    % Hier muss jetzt jeder Klein- durch den entsprechenden Großbuchstaben ersetzt werden.
    \tl_upper_case:V \l_tmpa_tl
  }
\cs_generate_variant:Nn \tl_upper_case:n { V }

Komplettes Beispiel:

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{expl3,xparse,etoolbox}
% es ist nötig, \linebreak robust zu machen, da \tl_upper_case:n sein Argument
% expandiert:
\robustify\linebreak

\ExplSyntaxOn
\cs_new_protected:Npn \cletus_replace:n #1
  {
    \tl_set:Nn \l_tmpa_tl {#1}
    \tl_replace_all:Nnn \l_tmpa_tl {ß} {ss}
    \tl_replace_all:Nnn \l_tmpa_tl {~} {/\linebreak[1]}
    % Hier muss jetzt jeder Klein- durch den entsprechenden Großbuchstaben ersetzt werden.
    \tl_upper_case:V \l_tmpa_tl
  }
\cs_generate_variant:Nn \tl_upper_case:n { V }

\NewDocumentCommand \MeinBefehl {m}
  { \cletus_replace:n {#1} }
\ExplSyntaxOff

\begin{document}

\MeinBefehl{aus klein mach groß}

\end{document}
Permanenter link

beantwortet 08 Jan, 17:33

Clemens's gravatar image

Clemens
19.0k112960

bearbeitet 09 Jan, 08:24

Wenn ich jetzt noch nach dem Schrägstrich einen Zeilenumbruch ermöglichen will, funktioniert das leider nicht mehr (vgl. obige Änderung).

(08 Jan, 17:52) Cletus

@Cletus wie ich schrieb: \tl_upper_case:n expandiert sein Argument. \linebreak ist aber kein robuster Befehl. In interface3, wo die Befehle beschrieben werden, wird auch auf dieses Problem hingewiesen und wie man es beheben kann: in dem man den entsprechenden Befehl robust macht. LaTeX2es Lösung mit \protect funktioniert nicht. Stattdessen kan man das Paket etoolbox laden und \robustify\linebreak in der Präambel hinzufügen, dann läuft's auch wieder.

(09 Jan, 08:21) Clemens

@Cletus ich hab das mal als lauffähiges Beispiel hinzugefügt

(09 Jan, 11:23) Clemens

@Clemens Wieso so umständlich? Einfach \slash statt / verwenden, denn

% latex.ltx, line 571:

\def\slash{/\penalty\exhyphenpenalty} % a/' that acts like a -'

(09 Jan, 13:33) Henri

Interessanter Hinweis, Henri, den \slash-Befehl kannte ich gar nicht. Wäre es nicht auch möglich, die Umwandlung in Großbuchstaben vor der Ersetzung der Leerzeichen vorzunehmen, um das Problem zu umgehen? Oder ich lasse es doch mit expl3 und verwende \MakeUppercase.

(09 Jan, 17:34) Cletus

Unschön an \tl_upper_case ist IMHO, dass es bisher AFAIK nur US-ASCII umwandelt, aber beispielsweise kein Umlaute oder ß. Mit \MakeUppercase kann man sich die Sonderbehandlung für ß und ggf. für Umlaute dagegen sparen. Die werden dort mit umgewandelt.

@Henri: Bitte entferne den Block-Code aus Deinem Kommentar. Der zerstört leider noch immer die Kommentarfunktion.

(10 Jan, 06:28) saputello

@Henry ich reagiere nur auf die Frage. Und \linebreak taugt doch ganz gut, wie man hier mit zerbrechlichen Befehlen umgehen muss. Der nächste kommt bestimmt...

(10 Jan, 06:35) Clemens

@saputello man darf natürlich nicht vergessen, dass die Befehle und ihr Verhalten noch experimentell sind und noch weiterentwickelt werden. Joseph hat erst vor wenigen Tagen was in die Richtung gesagt: http://tex.stackexchange.com/questions/286650/how-to-make-tl-upper-casen-applied-to-diacritics-work-in-section-argument

(10 Jan, 06:41) Clemens

@saputello offenbar kommt in den nächsten Tagen ein Update, nach dem dann gängige Akzente auch funktionieren werden (siehe Link meines vorigen Kommentars)

(13 Jan, 07:49) Clemens
Ergebnis 5 von 9 Alle anzeigen
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×8
×4
×3
×2

Frage gestellt: 08 Jan, 17:19

Frage wurde angeschaut: 943 Mal

Zuletzt aktualisiert: 13 Jan, 07:49