2009-05-20 7 views
2

Lorsque j'attribue une nouvelle commande et l'appelle au début d'un \ par, l'espace entre le texte variable et le mot suivant est manquant.LaTeX newcommand par issue

\ newcommand {\ testcmd} {Ceci est un test}

\ par \ testcmd foobar.

génèrera le:

C'est un testfoobar.

\ par foo \ testcmd bar.

Rend bien comme: foo Ceci est une barre de test.

Quelqu'un est-il déjà arrivé et a-t-il trouvé une solution?

Merci

Répondre

4

Je ne sais pas la chose exacte qui se passe ici, mais il y a plusieurs façons d'obtenir cet espace arrière:

  1. \newcommand{\testcmd}{This is a test } % <- space before closing brace
  2. par \testcmd{} foobar % <- note {}
  3. Le plus bavard mais le moyen le plus robuste aussi:

    \ usepackage {xspace}

    \ newcommand {\ testcmd} {Ceci est un test \ xspace}

+1

Qu'est-ce qui se passe est que le lexer TeX considère que toute quantité d'espace blanc pour terminer la commande et gobe tout cela. Si ce n'est pas le cas, vous devrez faire attention aux espaces après chaque invocation de commande. –

1

En fait, une répondrions plus simple est de:

\newcommand{\testcmd}{This is a test} 

\par \testcmd \ foobar. 

avis extra "\" avant foobar (barre oblique et espace). Aucun paquet supplémentaire nécessaire. Il est le même que la méthode la plus courante pour des choses comme:

Mr.\ Smith 
etc.\ and 
Proc.\ Amer.\ Math.\ Soc. 
+4

Je crois qu'il est de coutume dans (La) TeX d'écrire "Mr. Smith" comme "Mr. ~ Smith" pour éviter de placer un saut de ligne entre le titre et le nom de famille. – las3rjock

+0

> Normalement latex vous permet d'indiquer que vous ne voulez pas l'espacement inter-phrase dans ces circonstances soit en échappant à l'espace avec un \ "Mr. \ Smith" ou en insérant un espace insécable avec ~ "M. ~ Smith. " Le ~ est souvent la méthode préférée car elle empêche les sauts de ligne entre un titre et un nom, ou au milieu d'une abréviation, comme une citation. Hm n'a jamais connu cette option, merci pour l'info. – bastijn