сохраните текстовую строку в латексе и затем добавьте, что другой текст к нему (конкатенирует)

Я запускаю путем определения команды для хранения строки "Привет":

\newcommand{\textstring}{Hello}

Я хотел бы добавить строку "мир", но к сожалению этот код вызывает ошибку:

\renewcommand{\textstring}{\textstring world}
10
задан David Underhill 27 June 2010 в 02:29
поделиться

2 ответа

Вы можете сделать это, используя \ expandafter . Например:

% redefine \textstring by appending " world" to it
\expandafter\def\expandafter\textstring\expandafter{\textstring { }world}

Если вы не используете \ expandafter , вы получите проблему с рекурсией. Вы можете прочитать об этом здесь .

12
ответ дан 3 December 2019 в 21:19
поделиться

Проблема в том, что этот перезаписывает определение \ 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 , который сам расширяется до… вы поняли.

2
ответ дан 3 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: