Benötigt wird ein Befehl oder eine Umgebung, die alle Leerzeichen in einem Text durch ein anderes Zeichen, z. B. „/“, ersetzt und diesen ansonsten unverändert wiedergibt.

Die Eingabe soll beispielsweise so aussehen:

Open in Online-Editor
\documentclass{article}
\newcommand{\MeinBefehl}[1]{#1} % bitte anpassen

\begin{document}
\MeinBefehl{Fest gemauert in der Erden steht die Form aus Lehm gebrannt}
\end{document}

Die gewünschte Ausgabe wäre hier „Fest/gemauert/in/der/Erden/steht/die/Form/aus/Lehm/gebrannt“.

gefragt 29 Dez '15, 17:04

Cletus's gravatar image

Cletus
1.6k75866
Akzeptiert-Rate: 75%


Das Paket stringstrings hilft:

Open in Online-Editor
\documentclass{article}
\usepackage{stringstrings}

% Ersetzung des Leerzeichens durch den Schrägstrich:
\newcommand{\MeinBefehl}[1]{\convertchar{#1}{ }{/}}

\begin{document}
\MeinBefehl{Fest gemauert in der Erden steht die Form aus Lehm gebrannt}
\end{document}
Permanenter link

beantwortet 29 Dez '15, 21:11

Cletus's gravatar image

Cletus
1.6k75866
Akzeptiert-Rate: 75%

expl3 stellt mit \tl_replace_all:Nnn genau das Werkzeug zur Verfügung. Hier ist eine Idee, wie man das in der Praxis anwenden könnte:

Open in Online-Editor
\documentclass{article}

\usepackage{expl3,xparse}
\ExplSyntaxOn
% #1: tokenlist
% #2: search
% #3: replace
\cs_new_protected:Npn \cletus_replace:nnn #1#2#3
  {
    \tl_set:Nn \l_tmpa_tl {#1}
    \tl_replace_all:Nnn \l_tmpa_tl {#2} {#3}
    \tl_use:N \l_tmpa_tl
  }

\NewDocumentCommand \MeinBefehl {m}
  { \cletus_replace:nnn {#1} {~} {/} }
\ExplSyntaxOff

\begin{document}

\MeinBefehl{Fest gemauert in der Erden steht die Form aus Lehm gebrannt}

% optional Zeichen aussuchen, das an Stelle des Leerzeichens verwendet wird:
\ExplSyntaxOn
\RenewDocumentCommand \MeinBefehl {O{/}m}
  { \cletus_replace:nnn {#2} {~} {#1} }
\ExplSyntaxOff

\MeinBefehl[+]{Fest gemauert in der Erden steht die Form aus Lehm gebrannt}

\end{document}
Permanenter link

beantwortet 02 Jan '16, 16:54

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

@Clemens: Mich hat diese Lösung übrigens erst abgeschreckt, bis ich entdeckt habe, dass sie vor allem deshalb so lang ist, weil Du als Alternative noch eine Variante mit optionalem Argument eingebaut für das Ersatzzeichen eingebaut hast. Ja, ich hatte erst nicht gelesen, sondern nur einen Blick darauf geworfen. Am Smartphone liest sich TeXwelt nicht so gut.

(04 Jan '16, 13:15) saputello

@saputello stimmt, ich versuche auch, TeXwelt nicht am Smartphone zu nutzen (und strafe mich mit diesem Kommentar Lügen ;)). Frohes neues Jahr!

(04 Jan '16, 13:21) cgnieder

Das stand hier.

alt text

Open in Online-Editor
\documentclass{article}

\newcommand*{\strC}{\begingroup
  \obeyspaces
  \begingroup\lccode`~=`\ %
  \lowercase{\endgroup\let~}\vsp
  \dostrC}
\newcommand{\dostrC}[1]{\textnormal{{\slshape\ttfamily#1}}\endgroup} % string constant
\newcommand*{\vsp}{\allowbreak\textvisiblespace\allowbreak} % visible space

\begin{document}
\strC{Hallo Welt:  x  und  y  sind die Variablen.~Neuer Satz...}
\end{document}
Permanenter link

beantwortet 29 Dez '15, 18:04

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 29 Dez '15, 18:04

Diese Lösung ist für mich schwer durchschaubar. Der Link auf Stackexchange ist allerdings hilfreich und hat zu einer Lösung geführt, die ich in einer Alternativantwort vorstelle.

(29 Dez '15, 21:09) Cletus
1

@Cletus: Das Zeichen, das da als Ersatz der Leerzeichen (und nur dieser) verwendet wird, ist in \vsp definiert. Man kann da auch ein / einsetzen. \textnormal, \slshape, \ttfamily sind für die Lösung unerheblich. Lässt man diese weg, wird die Lösung ein wenig durchschaubarer. Es ist dann eigentlich ein Standard-\lowercase-Trick. Diese Lösung hat den Vorteil, dass mehrere Leerzeichen hintereinander erkannt werden. Dafür muss man ggf. Zeilenumbrüche noch extra behandeln.

(30 Dez '15, 14:09) saputello

Mit xstring ist das ebenfalls möglich:

Open in Online-Editor
\documentclass{article}
\usepackage{xstring}

% Ersetzung des Leerzeichens durch den Schrägstrich:
\newcommand{\MeinBefehl}[1]{\StrSubstitute{#1}{ }{/}}

\begin{document}
\MeinBefehl{Fest gemauert in der Erden steht die Form aus Lehm gebrannt}
\end{document}

Dabei werden mehrere Leerzeichen übrigens im Gegensatz zur Lösung von @cis nur durch ein Zeichen ersetzt und auch Zeilenumbrüche werden als Leerzeichen behandelt.

Permanenter link

beantwortet 30 Dez '15, 14:04

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×15
×2

gestellte Frage: 29 Dez '15, 17:04

Frage wurde gesehen: 10,132 Mal

zuletzt geändert: 04 Jan '16, 13:37