Vous pouvez accomplir cela en utilisant \expandafter. Par exemple:
% redefine \textstring by appending " world" to it
\expandafter\def\expandafter\textstring\expandafter{\textstring { }world}
Si vous n'utilisez pas \expandafter puis vous vous retrouvez avec un problème de récursivité. Vous pouvez en lire plus à ce sujet ici.
Cette méthode fonctionne très bien (même si le texte figurant en annexe contient des commandes). Mais j'ai maintenant un autre problème: lorsque j'utilise \textstring dans mon texte, il affiche "Hello world", mais je dois l'utiliser dans \endnotetext[\value{enumi}]{\textstring} crée un vide endnote.
Le problème est que cette remplace la définition de \textstring, plutôt que faisant référence à l'ancien. Pour ajouter, la norme est d'utiliser la commande TeX \edef, ce qui élargit la définition avant de l'affecter à quelque chose. Ainsi, si vous avez
\def\textstring{Hello} % Or with \newcommand
\edef\textstring{\textstring{} world}
LaTeX va changer le côté droit de la \edef en Hello world, puis réaffecter que pour \textstring, qui est ce que vous voulez. Au lieu de cela, dans votre version actuelle, le \newcommandn'est pas développez le côté droit, de sorte que lorsque vous utilisez \textstring, il l'étend à \textstring world, qui lui-même s'étend à \textstring world world, qui lui-même s'applique à... vous obtenez l'idée.
Cette méthode semble avoir des problèmes lorsque le texte à ajouter contient des commandes, il a généré de nombreuses erreurs.
\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
(désolé brian, mais ce fut le plus illustre ce que je pouvais penser)
La scructure peut vous aider à créer une simple liste de choses à faire avec quelque chose comme:
\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
J'espère que cela peut aider quelqu'un là-bas en essayant de la concaténation de chaînes de caractères pour ce but.
La g@addto@macro macro permet d'obtenir le même effet, et peut produire un peu plus lisible le code (surtout si votre code est dans un package/style, ou si vous êtes déjà dans une \makeatletter & \makeatother situation)
Vous pouvez accomplir cela en utilisant
\expandafter
. Par exemple:Si vous n'utilisez pas
\expandafter
puis vous vous retrouvez avec un problème de récursivité. Vous pouvez en lire plus à ce sujet ici.OriginalL'auteur David Underhill
Le problème est que cette remplace la définition de
\textstring
, plutôt que faisant référence à l'ancien. Pour ajouter, la norme est d'utiliser la commande TeX\edef
, ce qui élargit la définition avant de l'affecter à quelque chose. Ainsi, si vous avezLaTeX va changer le côté droit de la
\edef
enHello world
, puis réaffecter que pour\textstring
, qui est ce que vous voulez. Au lieu de cela, dans votre version actuelle, le\newcommand
n'est pas développez le côté droit, de sorte que lorsque vous utilisez\textstring
, il l'étend à\textstring world
, qui lui-même s'étend à\textstring world world
, qui lui-même s'applique à... vous obtenez l'idée.OriginalL'auteur Antal Spector-Zabusky
Utilisé la saisie de cette question pour générer
(désolé brian, mais ce fut le plus illustre ce que je pouvais penser)
La scructure peut vous aider à créer une simple liste de choses à faire avec quelque chose comme:
J'espère que cela peut aider quelqu'un là-bas en essayant de la concaténation de chaînes de caractères pour ce but.
OriginalL'auteur Neon
Similaire à David Underhill, la réponse est la suivante
La
g@addto@macro
macro permet d'obtenir le même effet, et peut produire un peu plus lisible le code (surtout si votre code est dans un package/style, ou si vous êtes déjà dans une\makeatletter
&\makeatother
situation)OriginalL'auteur drfrogsplat