Kann man irgendwie eine Umgebung schaffen, in der zwischen allen Wörter der Wortzwischenraum \: gesetzt wird?

Öffne in Overleaf
\documentclass[border=5pt, varwidth]{standalone}
\usepackage{amsmath}
\begin{document}
Das ist ein Satz. \\
\text{Das\: ist\: ein\: Satz.}
\end{document}

gefragt 04 Nov '18, 21:20

cis's gravatar image

cis
9.5k74452491
Akzeptiert-Rate: 29%


Besser als Besser:

Im TeXbook wird deutlich, dass anstatt \fontdimen2 zu ändern, eher \spaceskip auf einen von 0pt verschiedenen Wert gesetzt werden sollte (danke Ulrike für den Hinweis darauf). Das Folgende setzt also \spaceskip auf den veränderten Wert (aber mit den Font eigenen Stretch und Shrink Faktoren):

Öffne in Overleaf
\documentclass[preview,border=2mm]{standalone}

\newcommand\SpreadSpace[1]
  {%
    \begingroup
    \setbox0\hbox{$\:$ \hbox{}}%
    \spaceskip\wd0 plus \fontdimen3\font minus \fontdimen4\font
    #1%
    \endgroup
  }

\newcommand\ExpandableText{This is text}

\begin{document}
This is text\par
\SpreadSpace{This is text}\par
\SpreadSpace{\ExpandableText}
\end{document}

(Ausgabe wie unten)


Besser als das Original:

Der Abstand zwischen zwei Wörtern wird in \fontdimen2 gespeichert. Man kann diese Größe durchaus ändern:

Öffne in Overleaf
\documentclass[preview,border=2mm]{standalone}

\newdimen\CisTmpDimen

\newcommand\SpreadSpace[1]
  {%
    \begingroup % the group is only necessary because of the \setbox0 thingy
    \setbox0\hbox{$\:$ \hbox{}}%
    \CisTmpDimen=\fontdimen2\font % changes are made global, we have to manually revert them
    \fontdimen2\font=\wd0
    #1%
    \fontdimen2\font=\CisTmpDimen
    \endgroup
  }

\newcommand\ExpandableText{This is text}

\begin{document}
This is text\par
\SpreadSpace{This is text}\par
\SpreadSpace{\ExpandableText}
\end{document}

alt text


Originalantwort:

Eine primitive Lösung wäre das Ersetzen aller gewöhnlichen Leerzeichen durch \:, dies wäre mit Hilfe von expl3 mit folgendem Code möglich. Das Makro kann gesternt verwendet werden, in diesem Fall wird das Argument vollständig expandiert (wie bei einem \edef), bevor die Ersetzung durchgeführt wird.

Öffne in Overleaf
\documentclass[preview,border=2mm]{standalone}

\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_cis_tmp_tl
\NewDocumentCommand \SpreadSpace { s m }
  {
    \IfBooleanTF { #1 }
      { \tl_set:Nx \l_cis_tmp_tl { #2 } }
      { \tl_set:Nn \l_cis_tmp_tl { #2 } }
    \tl_replace_all:Nnn \l_cis_tmp_tl { ~ } { \ensuremath { \: } ~ }
    \l_cis_tmp_tl
  }
\ExplSyntaxOff

\newcommand\ExpandableText{This is text}

\begin{document}
This is text\par
\SpreadSpace{This is text}\par
\SpreadSpace{\ExpandableText}\par
\SpreadSpace*{\ExpandableText}
\end{document}

alt text

Permanenter link

beantwortet 05 Nov '18, 01:59

Skillmon's gravatar image

Skillmon
1.1k6
Akzeptiert-Rate: 48%

bearbeitet 06 Nov '18, 19:48

2

Ich würde wahrscheinlich eher spaceskip ändern (aber der Kontext ist mir nicht ganz klar); https://tex.stackexchange.com/questions/99542/fixed-width-interword-space/99571#99571

(05 Nov '18, 12:10) Ulrike Fischer
1

@UlrikeFischer Der Kontext ist mir (ebenfalls) nicht bekannt. Die Regeln von \spaceskip waren mir bisher nicht bekannt (habe gerade im TeXbook nachgelesen), scheint, als wäre das tatsächlich die von Knuth vorgesehene Variante. Möchtest du eine Antwort erstellen, oder soll ich meine noch einmal abändern?

(05 Nov '18, 14:23) Skillmon

@Skillmon du kannst ruhig die Antwort ergänzen.

(05 Nov '18, 23:42) Ulrike Fischer
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:

×74
×38

gestellte Frage: 04 Nov '18, 21:20

Frage wurde gesehen: 4,040 Mal

zuletzt geändert: 06 Nov '18, 19:48