# Besser als Besser:
Im TeXbook wird deutlich, dass anstatt `\fontdimen2` zu ändern, eher `\spaceskip` auf einen von 0pt verschiedenen Wert setzen 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):
\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:
\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][1]][1]
------
# 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.
\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][2]][3]
[1]: https://texwelt.de/wissen/upfiles/spacespread-1_1.png
[2]: https://texwelt.de/wissen/upfiles/spacespread-1.png
[3]: https://texwelt.de/wissen/upfiles/spacespread-1.png