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}
Similar to David Underhill's answer is the following
\newcommand{\textstring}{Hello}
\makeatletter
\g@addto@macro\textstring{ world}
\makeatother
The g@addto@macro
macro achieves the same effect, and may produce slightly more readable code (especially if your code is in a package/style, or if you're already in a \makeatletter
& \makeatother
situation)
Used the input from this question to generate
\edef\history{ }
\newcommand{\historyAdd}[1]{\edef\history{\history{}#1 }}
\newcommand{\historyAddEcho}[1]{#1\historyAdd{#1}}
The history was:
\historyAddEcho{Hi brian}
\historyAdd{you idiot}
\historyAddEcho{how are you?}
\lipsum[3]
The real history was: \history
(sorry brian, but this was the most illustrative example I could think of)
The scructure can help you create a simple todo list with something like:
\lipsum[1]
\historyAdd{\\work more with: }
\section{\historyAddEcho{Introduction}}
\lipsum[1]
\historyAdd{\\work more with the text on page \thepage}
\lipsum[1]
\section{ToDo:}
\history
Hope this can help someone out there trying to concat strings for this purpose.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With