Я запускаю путем определения команды для хранения строки "Привет":
\newcommand{\textstring}{Hello}
Я хотел бы добавить строку "мир", но к сожалению этот код вызывает ошибку:
\renewcommand{\textstring}{\textstring world}
Вы можете сделать это, используя \ expandafter
. Например:
% redefine \textstring by appending " world" to it
\expandafter\def\expandafter\textstring\expandafter{\textstring { }world}
Если вы не используете \ expandafter
, вы получите проблему с рекурсией. Вы можете прочитать об этом здесь .
Проблема в том, что этот перезаписывает определение \ textstring
, а не ссылается на старое. Для добавления стандартным способом является использование команды TeX \ edef
, которая расширяет определение перед назначением чего-либо. Таким образом, если у вас есть
\def\textstring{Hello} % Or with \newcommand
\edef\textstring{\textstring{} world}
, LaTeX изменит правую часть \ edef
на Hello world
, а затем переназначит это на \ textstring
, чего вы хотите. Вместо этого в вашей текущей версии \ newcommand
не расширяет правую часть, поэтому, когда вы используете \ textstring
, она расширяется до \ textstring world
, который сам расширяется до \ textstring world world
, который сам расширяется до… вы поняли.