2010-06-27 6 views

Répondre

9

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 savoir plus à ce sujet here.

+0

Cette méthode fonctionne correctement (même lorsque le texte ajouté contient des commandes). Mais maintenant j'ai eu un autre problème avec ça: quand j'utilise \ textstring dans mon texte il affiche "Hello world" mais je dois l'utiliser dans \ endnotetext [\ value {enumi}] {\ textstring} qui génère une note vide . – flaflamm

1

Le problème est que ce écrase la définition de \textstring, plutôt que de faire référence à l'ancien. Pour ajouter, la méthode standard consiste à utiliser la commande TeX \edef, qui étend la définition avant d'affecter quelque chose. Ainsi, si vous avez

\def\textstring{Hello} % Or with \newcommand 
\edef\textstring{\textstring{} world} 

LATEX changera la droite du \edef dans Hello world, puis à réattribuer que \textstring, qui est ce que vous voulez. Au lieu de cela, dans votre version actuelle, le \newcommandne le fait pas développez le côté droit, alors quand vous utilisez \textstring, il se dilate à \textstring world, qui se développe à \textstring world world, qui se se développe pour ... vous voyez l'idée.

+0

Cette méthode semble avoir des problèmes lorsque le texte à ajouter contient des commandes, il a généré de nombreuses erreurs. – flaflamm

1

similaires à la réponse de David Underhill est le

\newcommand{\textstring}{Hello} 
\makeatletter 
\[email protected]@macro\textstring{ world} 
\makeatother 

suite à la macro [email protected]@macro réalise le même effet, et peut produire un code légèrement plus lisible (surtout si votre code est dans un paquet/style ou si vous re déjà dans une situation \makeatletter & \makeatother)

2

occasion de l'entrée de cette question pour générer

\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 l'exemple le plus illustratif que je pouvais penser)

Le scructure peut vous aider à créer une liste de todo simple 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 

Espérons que cela peut aider quelqu'un là-bas essayer de concaténer des cordes à cette fin.

Questions connexes