Die Angabe eines Faktors zu einem Längenregister ist immer möglich:
\newlength{\laenge}
\setlength{\laenge}{2mm}
\setlength{\parindent}{2\laenge}
Dabei ist `\laenge` quasi die Maßeinheit und `2` der Wert in dieser Maßeinheit. Bei Befehlen ist dies im Gegensatz zu Registern nicht möglich. Sowohl `pdflatex`, `lualatex` und `xelatex` beinhalten aber außerdem auch die e-TeX-Erweiterungen. Bei den gängigen, freien TeX-Distributionen MiKTeX und TeX Live gilt das auch für `latex`. Damit sind Ausdrücke mit Hilfe von `\dimexpr` oder `\glueexpr` möglich:
\documentclass[12pt]{article}
\newcommand{\laenge}{2mm}
\begin{document}
\setlength{\parskip}{\glueexpr \laenge * 2 + 10pt plus 1pt minus 1pt\relax}
Der Absatzabstand ist nun: \the\parskip
\end{document}
[![Der Absatzabstand ist nun: 21.38107pt plus 1.0pt minus 1.0pt][1]][2]
Natürlich kann man `\glueexpr`, `\dimexpr` und `\numexpr` nicht nur innerhalb von `\setlength` verwenden. Sie sind überall dort einsetzbar, wie man auch *skips*, *dimens* oder *counter* oder deren Werte verwenden kann, also beispielsweise auch:
\documentclass[12pt]{scrbook}
\newcommand{\laenge}{2mm}
\RedeclareSectionCommand[tocnumwidth=\dimexpr\laenge+30mm\relax]{chapter} % Addition mit 30 mm
\begin{document}
\tableofcontents
\chapter{Test}
\end{document}
[![Der Inhaltsverzeichniseintrag mit großem Abstand zwischen Nummer und Text.][3]][3]
wobei hier als Besonderheit hinzu kommt, dass der Optionenparser von KOMA-Script für `tocnumwidth` (bzw. `numwidth` in `\DeclareTOCStyleEntry`) explizit auch Ausdrücke erlaubt.
Näheres zu `\numexpr`, `\dimexpr` und `\glueexpr` ist dem [e-TeX-Manual](http://mirrors.ctan.org/systems/doc/etex/etex_man.pdf) zu entnehmen (bitte unbedingt nachlesen!!!).
Ersetzt man im `\parskip`-Beispiel in diesem Beispiel `\parskip` durch `\parindent` erhält man übrigens als Ergebnis nur den Wert 21.38107pt ohne Leim (*glue*). Das liegt daran, dass `\parindent` nur ein (spezielles) Längenregister (*dimen*) ist, während `\parskip` eine dehn- und schrumpfbare Länge (*skip*) ist. Zu diesem Unterschied und dem zwischen Registern und Befehlen sei auf ausführliche LaTeX-Einführungen, [TeX by Topic](http://mirrors.ctan.org/info/texbytopic/TeXbyTopic.pdf) und [The TeXbook](https://www.lehmanns.de/shop/mathematik-informatik/172175-9780201134483-the-texbook) verwiesen.
Natürlich kann man `\glueexpr`, `\dimexpr` und `\numexpr` nicht nur innerhalb von `\setlength` verwenden. Sie sind überall dort einsetzbar, wie man auch *skips*, *dimens* oder *counter* oder deren Werte verwenden kann, also beispielsweise auch:
\documentclass[12pt]{scrbook}
\newcommand{\laenge}{2mm}
\RedeclareSectionCommand[tocnumwidth=\dimexpr\laenge+30mm\relax]{chapter} % Addition mit 30 mm
\begin{document}
\tableofcontents
\chapter{Test}
\end{document}
[![Der Inhaltsverzeichniseintrag mit großem Abstand zwischen Nummer und Text.][3]][3]
wobei hier als Besonderheit hinzu kommt, dass der Optionenparser von KOMA-Script für `tocnumwidth` (bzw. `numwidth` in `\DeclareTOCStyleEntry`) explizit auch Ausdrücke erlaubt.
Näheres zu `\numexpr`, `\dimexpr` und `\glueexpr` ist dem [e-TeX-Manual](http://mirrors.ctan.org/systems/doc/etex/etex_man.pdf) zu entnehmen (bitte unbedingt nachlesen!!!).
Bei Verwendung von `\dimexpr` innerhalb von `\newcommand` muss man beachten, dass dies wie Makros oder Längen auch, erst zum Zeitpunkt der Verwendung ausgewertet wird. Dagegen wird der Ausdruck bei Verwendung in `\setlength` unmittelbar ausgewertet. Das ist ein genereller Unterschied zwischen `\newcommand` (und Makros) zu `\setlength` (und Längenregistern) und hat nichts mit `\dimexpr` selbst zu tun.
Nur zur Vollständigkeit sei auch noch auf das Paket [`calc`](https://ctan.org/pkg/calc) hingewiesen, das diverse LaTeX-Befehle wie `\setlength`, `\addtolength` aber auch `\rule`, `\makebox`, `\parbox` etc. so erweitert, dass Berechnungen in den Längenargumenten möglich sind:
\documentclass[12pt]{article}
\usepackage{calc}
\newcommand{\laenge}{2mm}
\begin{document}
\setlength{\parskip}{\laenge * 2 + 10pt plus 1pt minus 1pt}
Der Absatzabstand ist nun: \the\parskip
\end{document}
Allerdings findet dabei die Zerlegung der Ausdrücke in TeX statt, was wesentlich langsamer ist als die Verarbeitung mit den e-TeX-Primitiven `\dimexpr`, `\glueexpr` und `\numexpr`.
`\numexpr`. Außerdem verändert das Paket nur die Befehle, die es kennt und hat beispielsweise keinen Einfluss darauf, was KOMA-Script als Wert für eine Option erlaubt.
Darüber hinaus gibt es Berechnungsmöglichkeiten auch in [LaTeX3](https://ctan.org/pkg/l3kernel). So bietet beispielsweise `l3skip` mit `\dim_eval:n` die Möglichkeit, Ausdrücke zu berechnen. Damit verlassen wir dann aber die *normale* LaTeX-Syntax. `expl3` beschreibt eher die Implementierungsebene für neue Benutzeranweisungen (also das, was Paketautoren verwenden können oder sollten) und ist weniger dazu gedacht, vom Benutzer direkt verwendet zu werden.
[1]: https://texwelt.de/wissen/upfiles/test_20180424_102208.png
[2]: https://texwelt.de/wissen/upfiles/test_20180424_102208.png
[3]: https://texwelt.de/wissen/upfiles/test_20180425_075153.png