I start by defining a command to store the string "Hello":
\newcommand{\textstring}{Hello}
I would like to append the string " world" but unfortunately this code causes an error:
\renewcommand{\textstring}{\textstring world}
I start by defining a command to store the string "Hello":
\newcommand{\textstring}{Hello}
I would like to append the string " world" but unfortunately this code causes an error:
\renewcommand{\textstring}{\textstring world}
You can accomplish this by using \expandafter
. For example:
% redefine \textstring by appending " world" to it
\expandafter\def\expandafter\textstring\expandafter{\textstring { }world}
If you don't use \expandafter
then you end up with a recursion problem. You can read more about it here.
The problem is that this overwrites the definition of \textstring
, rather than referencing the old one. In order to append, the standard way is to use the TeX command \edef
, which expands the definition before assigning something. Thus, if you have
\def\textstring{Hello} % Or with \newcommand
\edef\textstring{\textstring{} world}
LaTeX will change the right-hand side of the \edef
into Hello world
, and then reassign that to \textstring
, which is what you want. Instead, in your current version, the \newcommand
doesn't expand the right-hand side, so when you use \textstring
, it expands to \textstring world
, which itself expands to \textstring world world
, which itself expands to… you get the idea.