Bonne façon de définir des macros \etc \ie en latex
Dans
cet article l'auteur discute de l'utilisation de \@ à mettre corriger les espacements d'après les points qui ne sont pas à la fin d'une phrase, par exemple, M. d. etc.
La macro suggéré
\newcommand\etc{etc\@ifnextchar.{}{.\@}}
n'est pas tout à fait parfait, car dans le cas (\etc more text)
il produit (etc.more text)
.
J'ai vu beaucoup d'auteurs qui ont fait leur propre version de la \etc
macro, la plupart des variations sur etc.\
.
Que les macros pour \etc
, \ie
, \etal
, \eg
produire les meilleurs résultats dans la plupart des situations?
Est-ce quelque chose de trop personnel dans le goût d'être résolu en général?
- Cela a été mon préféré [latex] qn dans un temps long.
- J'ai utilisé \xspace pour mon \etc-comme les macros, et en regardant, il me donne le mal de l'espacement et je n'ai jamais remarqué. Je suis content de lire cette question.
- Quelles sont les contre exemples? J'ai posté une réponse il y a quelques jours et juste vu ce commentaire.
- Désolé, je n'était pas claire. J'ai été en utilisant etc.\xspace plutôt que de etc.\@\xspace et naturellement causé des problèmes.
- Liés à la question sur tex.stackexchange: les Bonnes pratiques sur l'espacement.
- Cela devrait-il être migré vers tex.SE tout?
Vous devez vous connecter pour publier un commentaire.
Plus tôt, j'ai utilisé les macros pour "et coll." etc., mais aujourd'hui, je voudrais décourager les gens de la définition de ce type de macros.
Un problème est ce qu'on a déjà observé: il est étonnamment difficile à obtenir l'définitions de droit, afin qu'ils manipulent tous les cas spéciaux correctement (y compris les interactions avec d'autres paquets – par exemple, ceux qui re-définir le "\cite de la commande" et de modifier l'espacement avant les références).
Mais plus important encore, même si vous avez un tas de macros en fonction de vos besoins et vous savez comment les utiliser, votre co-auteurs sont susceptibles d'être confondu avec exactement comment utiliser des macros correctement dans divers cas particuliers.
Donc je vous recommande d'éviter les macros pour des choses insignifiantes comme "et coll." et simplement tout expliquer par l'utilisation de Latex standard de balisage. Après tout, la plupart des cas, n'ont pas besoin particulières de manipulation ("par exemple" est souvent suivi d'une virgule; "et coll." est souvent suivi par "~\cite", etc.), et à chaque fois qu'un traitement spécial est nécessaire, tous les utilisateurs de Latex doivent savoir comment utiliser les commandes comme "\ " et "\@".
xspace
, qui, selon lui, est unheuristic for defeating LaTeX behavior of chomping a space following a macro in the case where the space was supposed to be preserved in the output
. Je n'ai pas vraiment lu trop parce que je suis sur ce site brièvement et pour d'autres raisons, mais il peut vous aider, ou du moins je l'espère. Ce qui concerne.Un défi technique! On peut éviter le problème des lettres après les espaces en regardant le catcode du caractère suivant et de voir si oui ou non il s'agit d'une lettre; cela peut être fait avec le Latex3 de expl3 macro
\peek_charcode:NTF
(mon premier expl3 code!):Jukka les conseils je pense que c'est le son, cependant: je dirais que le problème se travaille avec son \etc macro, nous devrions le voir comme un bogue dans le Tex mise en œuvre de l'espacement double (will Robertson doit demander son chèque): si vous connaissez le bug est là, vous pouvez le contourner directement par la mise en \@ dans de tels cas ".)", ou vous pouvez avoir délicate code qui signifie que vous n'avez pas à penser dans ce cas, mais vous avez ajouté de la complexité de la façon dont vous composez ce qui n'est pas d'aller travailler pour vous avec le côté inattendu de pépin, on vous avez probablement vous-même introduit.
Postscript Précédente version fixe, grâce à Joseph Wright remarquer une erreur stupide à tex.stackexchange.com.
\eg an example
.xspace
qui semble donner les fonctionnalités dont vous avez mis en place (sans avoir besoin deexpl3
). Veuillez s'il vous plaît vérifier les exemples dans ma réponse? Merci.Dans CVPR de l'ensemble de style, il est défini comme:
Avez-vous essayé d'utiliser le
xspace
paquet?Exemple de macro:
Quelques tests:
Produit:
De la documentation:
Maybe a list, \eg,
une liste devrait êtreMaybe a list, \eg.,
depuis votre macro ne pas avoir la fin de la période en elle. Je vois maintenant pourquoi vous ne comprennent pas la période de fin dans votre macro. Merci.Toutes les commandes LaTeX éliminer de l'espace après eux. Si vous souhaitez un espace, vous devez vous échapper:
Cela est nécessaire, parce que vous devez être clair d'où le nom de la commande se termine.
\etcno space
ne peut pas être correctement interprétées.\csname
) sont d'un caractère de longues séquences de contrôle et de ne pas avaler de l'espace. C'est exactement pourquoi il est une bonne idée de regarder le prochain personnage catcode.xspace
que pouvez vérifier pour voir si vous avez besoin de l'espace. Allez-vous prendre un coup d'oeil à ma réponse, et de voir si il y a des contre exemples? Merci.