Définitions
LaTeX prend en charges la fabrication de nouvelles commandes de bien des genres.

\newcommand & \renewcommand
Synopsis, l’un parmi (trois formes ordinaires, trois formes étoilées) :

\newcommand{\cmd}{défn}
\newcommand{\cmd}[nargs]{défn}
\newcommand{\cmd}[nargs][optargdéfaut]{défn}
\newcommand*{\cmd}{défn}
\newcommand*{\cmd}[nargs]{défn}
\newcommand*{\cmd}[nargs][optargdéfaut]{défn}

ou toutes les mêmes possibilités avec \renewcommand au lieu de \newcommand :

\renewcommand{\cmd}{défn}
\renewcommand{\cmd}[nargs]{défn}
\renewcommand{\cmd}[nargs][optargdéfaut]{défn}
\renewcommand*{\cmd}{défn}
\renewcommand*{\cmd}[nargs]{défn}
\renewcommand*{\cmd}[nargs][optargdéfaut]{défn}

Définit ou redéfinit une commande (voir aussi \DeclareRobustCommand dans Class and package commands).
La forme étoilée (en *) de ces commandes interdit que les arguments contiennent une multiplicité de paragraphes de texte (la commande n’est pas \long, dans la terminologie de TeX de base). Avec la forme par défaut, il est possible qu’un argument soit une multiplicité de paragraphes.
Description des paramètres (des exemples suivront) :
cmd 	Obligatoire ; \cmd est le nom de la commande. Il doit commencer par une controblique, \, et ne doit pas commencer avec la chaîne de 4 caractères \end. Pour \newcommand, il ne doit pas être déjà défini et ne doit pas commencer avec \end ; pour \renewcommand, il doit être déjà défini.
nargs 	Optionnel ; un entier compris entre 1 et 9 spécifiant le nombre d’arguments que la commande prend, y compris un éventuel argument optionnel. Si cet argument n’est pas présent, alors la spécification par défaut est que la commande ne prend aucun argument. Lorsque on redéfinit une commande, la nouvelle version peut prendre un nombre différent d’arguments par rapport à l’ancienne.
optargdéfaut 	 Optionnel ; si cet argument est présent, alors le premier argument de la commande \cmd en définition est optionnel, et sa valeur par défaut est optargdéfaut (qui peut être une chaîne vide). Si cet argument n’est pas présent, alors \cmd ne prend pas d’argument optionnel.
C’est à dire que si \cmd est appelée avec à la suite un argument entre crochets, comme dans \cmd[valopt], alors au sein de défn le paramètre #1 est réglé à valopt. Par contre si \cmd est appelé sans crochet à la suite, alors au sein de défn le paramètre #1 est réglé à optargdéfaut. Dans les deux cas, les arguments obligatoires commencent par #2.
Omettre [optargdéfaut] d’une définition est très différent de mettre des crochets vides, comme dans []. Dans le premier cas on dit que la commande ainsi définie ne prend pas d’argument optionnel, de sorte que #1 est le premier argument obligatoire (à supposer que nargs ≥ 1) ; dans le second cas on règle l’argument optionnel #1 à être une chaîne vide par défaut, c.-à-d. si aucun argument optionnel n’est donné à l’appel.
De même, omettre [valopt] d’un appel est également très différent que de donner des crochets vides, comme dans []. Dans le premier cas on règle #1 à la valeur de valopt (à supposer que la commande a été définie pour prendre un argument optionnel) ; alors que dans le second on règle #1 à la chaîne vide, comme on le ferait pour n’importe quelle autre valeur.
Si une commande n’est pas définie pour prendre un argument optionnel, mais qu’elle est appelée avec un argument optionnel, les résultats sont imprévisibles : il peut y avoir une erreur LaTeX, une sortie incorrectement composée, ou les deux.
défn 	 Obligatoire ; le texte par lequel substituer chaque occurrence de \cmd. Les paramètres #1, #2, …, #nargs sont remplacés par les valeurs fournies en appelant la commande (ou par optargdéfaut dans le cas d’un argument optionnel non spécifié dans l’appel, comme cela vient d’être expliqué).
TeX ignore les blancs dans le code source à la suite d’un mot de contrôle (voir Control sequences), comme dans ‘\cmd ’. Si vous désirez une espace réellement à cet endroit, une solution est de taper {} après la commande (‘\cmd{} ’), et une autre est d’utiliser un espace de contrôle explicite (‘\cmd\ ’).
Un exemple simple de définition d’une nouvelle commande : \newcommand{\JM}{Jean Martin} a pour effet le remplacement de \JM par le texte plus long de la définition. La redéfinition d’une commande existante est similaire : \renewcommand{\symbolecqfd}{{\small CQFD}}.
Si vous utilisez \newcommand et que le nom de commande a déjà été utilisé alors vous obtenez quelque chose du genre de ‘LaTeX Error: Command \fred already defined. Or name \end... illegal, see p.192 of the manual’. Si vous utilisez \renewcommand et que le nom de commande n’a pas encore été utilisé alors vous obtenez quelque chose du genre de ‘LaTeX Error: \hank undefined’.
Dans l’exemple suivant la première définition crée une commande sans argument, et la seconde, une commande avec un argument obligatoire :

\newcommand{\etudiant}{Melle~O'Leary}
\newcommand{\defref}[1]{Définition~\ref{#1}}

Utilisez la première commande comme dans Je confie \etudiant{} à vos bons soins. La seconde commande a un argument variable, de sorte que \defref{def:base} se développe en Definition~\ref{def:base}, ce qui en fin de compte se développera en quelque chose du genre de ‘Définition~3.14’.
Un exemple avec deux arguments obligatoires : \newcommand{\nbym}[2]{$#1 \times #2$} est invoqué comme \nbym{2}{k}.
Un exemple avec un argument optionnel :

\newcommand{\salutation}[1][Madame, Monsieur]{#1,}

Alors, \salutation donne ‘Madame, Monsieur,’ alors \salutation[Cher Jean] donne ‘Cher Jean,’. Et \salutation[] donne ‘,’.
Cet exemple a un argument optionnel et deux arguments obligatoires.

\newcommand{\avocats}[3][cie]{#2, #3, et~#1}
J'emploie \avocats[Odette]{Devoie}{Trichou}.

En sortie on a ‘J'emploie Devoie, Trichou, et Odette’. L’argument optionnel, c.-à-d. Odette, est associé à #1, alors que Devoie et Trichou le sont à #2 et #3. À cause de l’argument optionnel, \avocats{Devoie}{Trichou} donne en sortie ‘J'emploie Devoie, Trichou, et cie’.
Les accolades autour de défn ne définissent pas un groupe, c.-à-d. qu’elle ne délimitent pas la portée du résultat du développement de défn. Ainsi la définition \newcommand{\nomnavire}[1]{\it #1} est problématique dans cette phrase :

Le \nomnavire{Monitor} rencontra le \nomnavire{Merrimac}.

les mots ‘rencontra le’, et le point, sont mis incorrectement en italique. La solution est de mettre une paire supplémentaire d’accolades au sein de la définition : \newcommand{\nomnavire}[1]{{\it #1}}.

Séquence de contrôle, mot de contrôle et symbole de contrôle
En lisant l’entrée TeX convertit le flux des caractères lus en une séquence d’unités lexicales, encore appelées lexèmes[1]. Lorsque TeX voit une controblique \, il gère les caractères suivants d’une manière spéciale de sorte à former une unité lexicale séquence de contrôle.
[1] En anglais c’est le terme jeton — token — qui est utilisé.
Les séquences de contrôle peuvent être classées en deux catégories :
Les mots de contrôle, quand la séquence de contrôle est formée à partir d’une \ suivie par au moins une lettre ASCII (A-Z et a-z), suivie par au moins une non-lettre.
Les symboles de contrôle, quand la séquence de contrôle est formée à partir d’une \ suivi d’un unique caractère non-lettre.
La séquence des caractères ainsi trouvés après le \ est aussi appelé le nom de la séquence de contrôle.
Les blancs suivant un mot de contrôle sont ignorés et ne produisent aucun espace blanc en sortie (voir \newcommand & \renewcommand et \(SPACE)).
Étant donné que la commande \relax ne fait rien, l’exemple suivant imprime simplement ‘Bonjour !’ :

Bon\relax␣␣␣
␣␣␣jour !

Ceci parce que les blancs suivant \relax, y compris le caractère saut-de-ligne, sont ignorés, et que les blancs en début de ligne sont aussi ignorés (voir Leading blanks).

\providecommand
Synopsis, l’un parmi :

\providecommand{\cmd}{défn}
\providecommand{\cmd}[nargs]{défn}
\providecommand{\cmd}[nargs][optargdéfaut]{défn}
\providecommand*{\cmd}{défn}
\providecommand*{\cmd}[nargs]{défn}
\providecommand*{\cmd}[nargs][optargdéfaut]{défn}

Définit une commande, du moment qu’aucune commande de même nom n’existe déjà. Si aucune commande de ce nom n’existe alors ceci a le même effet que \newcommand (voir \newcommand & \renewcommand). Si une commande de ce nom existe déjà alors cette définition est sans effet. Ceci est particulièrement utile dans tout fichier susceptible d’être chargé plus d’une fois, tel qu’un fichier de style. Voir \newcommand & \renewcommand, pour la description des arguments.
Dans l’exemple suivant :

\providecommand{\monaffiliation}{Saint Michael's College}
\providecommand{\monaffiliation}{Lycée Henri IV}
Depuis \monaffiliation.

on a en sortie ‘Depuis Saint Michael's College’. Contrairement à \newcommand, l’utilisation répétée de \providecommand pour (essayer de) définir \monaffiliation ne produit pas d’erreur.

\makeatletter et \makeatother
Synopsis :

\makeatletter
  ... définition de commande comprenant @ dans leur nom ..
\makeatother

Utilisez cette paire de commandes quand vous redéfinissez les commandes LaTeX dont le nom comprend un caractère arobe ‘@’. La déclaration \makeatletter a pour effet que le caractère arobe ait le code de catégorie des lettres, c.-à-d. le code 11. La déclaration \makeatother règle de code de catégorie de l’arobe au code 12, sa valeur d’origine.
À mesure que chaque caractère est lu par TeX, un code de catégorie lui est assigné. On appelle aussi ce code catcode pour faire court. Par exemple, la controblique \ reçoit le catcode 0. Les noms de commande consistent en un caractère de catégorie 0, d’ordinaire une controblique, suivi par des lettres, c.-à-d. des caractères de catégorie 11 (à ceci près qu’une commande peut également consister en un caractère de catégorie 0 suivi d’un unique caractère qui n’est pas une lettre).
Le code source de LaTeX suit la convention que certaines commandes utilisent @ dans leur nom. Ces commandes sont principalement destinées aux auteurs de paquetages ou de classes. Cette convention empêche les auteurs qui sont juste utilisateurs d’un paquetage ou d’une classe de remplacer accidentellement une telle commande par une commande définie par eux, puisque par défaut l’arobe a le catcode 12 (other).
Utilisez la paire \makeatletter et \makeatother au sein d’un fichier .tex, typiquement dans le préambule, quand vous définissez ou redéfinissez des commandes dont le nom comprend @, en entourant votre définition par elles. Ne les utilisez pas au sein de fichiers .sty ou .cls puisque les commandes \usepackage et \documentclass font déjà le nécessaire pour que l’arobe ait le catcode d’une lettre, à savoir 11.
Pour une liste complète des macros contenant une arobe dans leur nom, voir le document http://ctan.org/pkg/macros2e.
Dans l’exemple suivant une commande \these@nomuniversite se trouve dans le fichier de classe, et l’utilisateur veut changer sa définition. Pour cela, il suffit d’insérer les trois lignes suivantes dans le préambule, avant le \begin{document} :

\makeatletter
\renewcommand{\these@nomuniversite}{Université Lyon III Jean Moulin}
\makeatother

\@ifstar
Synopsis :

\newcommand{\macmd}{\@ifstar{\macmd@star}{\macmd@nostar}}
\newcommand{\macmd@nostar}[nostar-nbre-args]{nostar-corps}
\newcommand{\macmd@star}[star-nbre-args]{star-corps}

Vous l’avez sans doute remarqué, beaucoup d’environnements ou commandes standards de LaTeX existent sous une variante avec le même nom mais finissant avec le caractère étoile *, un astérisque. Par exemple c’est le cas des environnements table et table*, et des commandes \section et \section*.
Lorsque on définit un environnement, cela est facile puisque \newenvironment et \renewenvironment autorisent que le nom de l’environnement contienne un astérisque. Il vous suffit donc d’écrire \newenvironment{monenv} ou \newenvironment{monenv*} et de continuer la définition comme d’habitude. Pour les commandes, c’est plus compliqué car l’étoile n’étant pas une lettre ne peut pas faire partie du nom de la commande. Comme dans le synopsis ci-dessus, on a donc une commande utilisateur, donnée ci-dessus comme \macmd, qui doit être capable de regarder si elle est ou non suivie d’une étoile. Par exemple, LaTeX n’a pas réellement une commande \section* ; au lieu de cela la commande \section regarde ce qui la suit. Cette première commande n’accepte d’argument, mais au lieu de cela se développe en l’une de deux commandes qui elle accepte des arguments. Dans le synopsis ces commandes sont \macmd@nostar et \macmd@star. Elles peuvent prendre le même nombre d’arguments ou un nombre différent, ou pas d’argument du tout. Comme d’habitude, dans un document LaTeX une commande utilisant l’arobe @ dans son nom doit être comprise au sein d’un bloc \makeatletter ... \makeatother (voir \makeatletter & \makeatother).
Dans cet exemple, on définit \ciel comme une commande avec un argument obligatoire et admettant une variante étoilée \ciel* également avec un argument obligatoire. Ainsi, \ciel{bleu} composera « ciel bleu non étoilé » tandis que \ciel*{nocturne} composera « ciel nocturne étoilé ».

\makeatletter
\newcommand*\ciel@starred[1]{ciel #1 étoilé}
\newcommand*\ciel@unstarred[1]{ciel #1 non étoilé}
\newcommand\ciel{\@ifstar{\ciel@starred}{\ciel@unstarred}}
\makeatother

Voici un autre exemple, où la variante étoilée prend un nombre d’arguments différent de la non étoilée. Avec cette définition, la célèbre réplique de l’agent 007 « Mon nom est \agentsecret*{Bond}, \agentsecret{James}{Bond}. » est équivalente à saisir les commandes « Je m'appelle \textsc{Bond}, \textit{James} textsc{Bond}. »

\makeatletter
\newcommand*\agentsecret@starred[1]{\textsc{#1}}
\newcommand*\agentsecret@unstarred[2]{\textit{#1} \textsc{#2}}
\newcommand\agentsecret{\@ifstar{\agentsecret@starred}{\agentsecret@unstarred}}
\makeatother

Après le nom d’une commande, l’étoile est traitée d’une manière similaire à un argument optionnel. (Ceci est différent des noms d’environnement, où l’étoile fait partie du nom lui-même, et peut donc être à n’importe quelle position). D’un point de vue purement technique il est donc possible de mettre un nombre indéfini d’espaces entre la commande et l’étoile. Ainsi \agentsecret*{Bond} et \agentsecret *{Bond} sont équivalents. Toutefois, la pratique normale est de ne pas insérer de tels espaces.
Il y a deux manières pouvant être plus commodes d’accomplir la même tâche que \@ifstar. Le paquetage suffix permet la construction \newcommand\macommande{variante-non-étoilée} suivie de \WithSuffix\newcommand\macommande*{variante-étoilée}. Et LaTeX3 a le paquetage xparse qui permet ce code.

\NewDocumentCommand\toto{s}{\IfBooleanTF#1
  {variante-étoilée}%
  {variante-non-étoilée}%
  }

\newcounter : allouer un compteur
Synopsis :

\newcounter{nomcompteur}
\newcounter{nomcompteur}[super]

La commande \newcounter définit un nouveau compteur nommé nomcompteur. Le nouveau compteur est initialisé à zéro.
Quand l’argument optionnel [super] est fourni, le compteur nomcompteur est réinitialisé à chaque incrémentation du compteur nommé super.
Voir Counters, pour plus d’information à propos des compteurs.

\newlength
Synopsis :

\newlength{\longueur}

Alloue un nouveau registre de longueur (voir Lengths). L’argument obligatoire \longueur doit être une séquence de contrôle (voir Control sequences), et donc commencer par une controblique \ dans les circonstances normales. Le nouveau registre détient des longueurs (élastiques) telles que 72.27pt ou 1in plus.2in minus.1in (un registre de longueur LaTeX est ce que TeX de base appelle un registre skip, ou registre de pas). Le registre est créé avec une valeur initiale de zéro. La séquence de contrôle \longueur doit ne pas être déjà définie.
Voici une exemple :

\newlength{\graphichgt}

Si vous oubliez la controblique alors vous obtenez l’erreur ‘Missing control sequence inserted’. Si la séquence de contrôle existe déjà alors vous obtenez quelque chose du genre de ‘LaTeX Error: Command \graphichgt already defined. Or name \end... illegal, see p.192 of the manual’.

\newsavebox : allouer une boîte
Alloue un « baquet » pour détenir une boîte. Synopsis :

\newsavebox{\cmd}

Définit \cmd pour se référer à un nouveau baquet pour stocker des boîtes. Une telle boîte sert à détenir de la matière composée, pour l’utiliser plusieurs fois (voir Boxes) ou pour le mesurer ou le manipuler. Le nom \cmd doit commencer par une controblique, et ne doit pas être déjà défini.
L’allocation d’une boîte est globale. Cette commande est fragile (voir \protect).

\newenvironment & \renewenvironment
Ces commandes définissent ou redéfinissent un environnement env, c.-à-d., \begin{env} corps \end{env}.
Synopsis :

  \newenvironment{env}[nargs][argoptdéfaut]{défdébut}{déffin}
  \newenvironment*{env}[nargs][argoptdéfaut]{défdébut}{déffin}
\renewenvironment{env}[nargs]{défdébut}{déffin}
\renewenvironment*{env}[nargs]{défdébut}{déffin}

La forme étoilée de ces commandes exige que les arguments (à ne pas confondre avec le corps de l’environnement) ne contiennent pas de paragraphes de texte.
env 	Obligatoire ; le nom de l’environnement. Il est constitué seulement de lettres ou du caractère astérisque *, et donc ne commence pas par une controblique \. Il ne doit pas commencer par la chaîne end. Pour \newenvironment, env ne doit pas être le nom d’un environnement déjà existant, et la commande \env ne doit pas être définie. Pour \renewenvironment, env doit être le nom d’un environnement déjà existant.
nargs 	Optionnel ; un entier de 0 à 9 indiquant le nombre d’arguments que l’environnement attend. Quand l’environnement est utilisé, ces arguments apparaissent après le \begin, comme dans \begin{env}{arg1}…{argn}. Si cet argument n’est pas présent, alors par défaut l’environnement n’attend pas d’argument. Lorsqu’on redéfinit un environnement, la nouvelle version peut prendre un nombre différent d’arguments que la précédente.
argoptdéfaut 	Optionnel ; si cet argument est présent alors le premier argument de l’environnement en définition est optionnel, et sa valeur par défaut est argoptdéfaut (éventuellement une chaîne vide). Si cet argument n’est pas présent alors l’environnement ne prend pas d’argument optionnel.
c.-à-d. que si [argoptdéfaut] est présent dans la définition de l’environnement alors vous pouvez commencer l’environnement avec des crochets, comme dans \begin{env}[valopt]{...} ... \end{env}. Dans ce cas, au sein de défdébut, le paramètre #1 est réglé à la valeur de valopt. Si par contre \begin{env} est appelé sans être suivi de crochet, alors, au sein de défdébut, le paramètre #1 est réglé à la valeur par défaut optargdéfaut. Dans les deux cas, le premier paramètre obligatoire, s’il en est, est #2.
Omettre [valopt] dans l’appel est différent d’avoir des crochets sans contenu, comme dans []. Dans le premier cas #1 se développe en argoptdéfaut, et dans le second en une chaîne vide.
défdébut 	Obligatoire ; le texte qui est développé à toute occurrence de \begin{env} ; au sein de défdébut, le nième paramètre positionnel, (c.-à-d. #n), est remplacé au sein de défdébut par le texte du nième argument.
déffin 	Obligatoire ; le texte développé à toute occurrence de \end{env}. Il ne doit contenir aucun paramètre positionnel, ainsi #n ne peut pas être utilisé ici (mais voyez l’exemple final ci-après).
Tous les environnements, c’est à dire le code de défdébut, le corps de l’environnement, et le code déffin, sont traités au sein d’un groupe. Ainsi, dans le premier exemple ci-dessous, l’effet de \small est limité à la citation et ne s’étend pas à la matière qui suit l’environnement.
Cet exemple dont un environnement semblable à quotation de LaTeX à ceci près qu’il sera composé dans une taille de police plus petite :

\newenvironment{smallquote}{%
  \small\begin{quotation}
}{%
  \end{quotation}
}

Celui-ci montre l’utilisation des arguments ; cela donne un environnement de citation qui affiche l’auteur :

\newenvironment{citequote}[1][Corneille]{%
  \begin{quotation}
  \noindent\textit{#1}:
}{%
  \end{quotation}
}

Le nom de l’auteur est optionnel, et vaut par défaut ‘Corneille’. Dans le document, utilisez l’environnement comme ceci :

\begin{citequote}[Clovis, roi des Francs]
  ...
\end{citequote}

Ce dernier exemple montre comment sauvegarder la valeur d’un argument pour l’utiliser dans déffin, dans ce cas dans une boîte (voir \sbox & \savebox).

\newsavebox{\quoteauthor}
\newenvironment{citequote}[1][Corneille]{%
  \sbox\quoteauthor{#1}%
  \begin{quotation}
}{%
  \hspace{1em plus 1fill}---\usebox{\quoteauthor}
  \end{quotation}
}

\newtheorem
Synopsis :

\newtheorem{nom}{titre}
\newtheorem{nom}{titre}[numéroté_au_sein_de]
\newtheorem{nom}[numéroté_comme]{titre}

Définit un nouvel environnement simili-théorème. Vous pouvez spécifier l’un seul de numéroté_au_sein_de ou numéroté_comme, ou ni l’un ni l’autre, mais non les deux à la fois.
La première forme, \newtheorem{nom}{titre}, crée un environnement qui sera étiqueté avec titre ; voir le premier exemple ci-dessous.
La seconde forme, \newtheorem{nom}{titre}[numéroté_au_sein_de], crée un environnement dont le compteur est subordonné au compteur déjà existant numéroté_au_sein_de, c.-à-d. qui est réinitialisé à chaque réinitialisation de numéroté_au_sein_de. Voir le second exemple ci-dessous.
La troisième forme \newtheorem{nom}[numéroté_comme]{titre}, avec l’argument optionnel entre les deux arguments obligatoires, crée un environnement dont le compteur partage le compteur déjà défini numéroté_comme. Voir le troisième exemple.
Cette déclaration est globale. Elle est fragile (voir \protect).
Arguments :
nom 	Le nom de l’environnement. C’est une chaîne de lettres. Il ne doit pas commencer avec une controblique (‘\’). Il ne doit pas être le nom d’un environnement déjà existant ; en fait le nom de commande \nom ne doit pas être déjà défini de quelque façon que ce soit.
titre 	Le texte imprimé au début de l’environnement, avant le numéro. Par exemple, ‘Théorème’.
numéroté_au_sein_de 	Optionnel ; le nom d’un compteur déjà défini, d’ordinaire une unité sectionnelle telle que chapter ou section. Lorsque le compteur numéroté_au_sein_de est réinitialisé, alors le compteur de l’environnement nom l’est aussi.
Si cet argument optionnel est omis alors la commande \thenom est définie comme \arabic{nom}.
numéroté_comme 	Optionnel ; le nom d’un environnement simili-théorème déjà défini. Le nouvel environnement se numérote en séquence avec numéroté_comme.
En l’absence des arguments optionnels les environnements sont numérotés en séquence. L’exemple suivant a une déclaration dans le préambule qui résulte en ‘Définition 1’ et ‘Définition 2’ en sortie.

\newtheorem{defn}{Définition}
\begin{document}
\section{...}
\begin{defn}
  Première déf.
\end{defn}

\section{...}
\begin{defn}
  Seconde déf.
\end{defn}

L’exemple suivant reprend le même corps de document que l’exemple précédent. Mais ici l’argument optionnel numéroté_au_sein_de de \newtheorem est spécifié comme section, aussi la sortie est du genre de ‘Définition 1.1’ et ‘Définition 2.1’.

\newtheorem{defn}{Definition}[section]
\begin{document}
\section{...}
\begin{defn}
  Première déf.
\end{defn}

\section{...}
\begin{defn}
  Seconde déf.
\end{defn}

Dans l’exemple suivant il y a deux déclarations dans le préambule, la seconde desquelles appelle le nouvel environnement thm pour utiliser le même compteur que defn. Cela donne ‘Définition 1.1’, suivi de ‘Théorème 2.1’ et ‘Définition 2.2’.

\newtheorem{defn}{Définition}[section]
\newtheorem{thm}[defn]{Théorème}
\begin{document}
\section{...}
\begin{defn}
  Première déf.
\end{defn}

\section{...}
\begin{thm}
  Premier théorème
\end{thm}

\begin{defn}
  Seconde déf.
\end{defn}
\section{...}

\newfont: définit une nouvelle police (obsolète)
\newfont, désormais obsolète, définit une commande qui commute la police de caractère. Synopsis :

\newfont{\cmd}{description_police}

Ceci définit une séquence de contrôle \cmd qui change la police courante. LaTeX cherche sur votre système un fichier nommé nompolice.tfm. La séquence de contrôle ne doit pas être déjà définie. Elle doit commencer par une controblique (‘\’).
Cette commande est obsolète. c’est une commande de bas niveau pour mettre en place une police individuelle. De nos jours, les polices sont pratiquement toujours définies en familles (ce qui vous permet, par exemple, d’associer un gras et un romain) au travers de ce qu’il est convenu de nommer le « Nouveau Plan de Sélection de Polices de caractère », soit en utilisant des fichiers .fd ou à travers l’utilisation d’un moteur qui sait accéder au système de polices de caractère, tel que XeLaTeX (voir Les moteurs TeX).
Mais puisque cela fait partie de LaTeX, voici l’explication : le paramètre description_police consiste en un nompolice et une clause at optionnelle ; celle-ci peut avoir soit la forme at dimen ou scaled facteur, où un facteur de ‘1000’ signifie aucune dilatation/contraction. Pour l’usage de LaTeX, tout ce que ceci fait est de dilater ou contracter le caractère et les autres dimensions relatives à la taille de conception de la police, ce qui est une valeur définie dans le fichier en .tfm.
Cet exemple définit deux polices équivalentes et compose quelques caractères dans chacune d’elles :

\newfont{\testpoliceat}{cmb10 at 11pt}
\newfont{\testpolicedilatee}{cmb10 scaled 1100}
\testpoliceat abc
\testpolicedilatee abc

\protect
Toutes les commandes de LaTeX sont soit fragiles soit robustes. Les notes en bas de page, les sauts de ligne, toute commande prenant un argument optionnel, et bien d’autres, sont fragiles. Une commande fragile peut se disloquer et causer une erreur lorsque elle est utilisée au sein de l’argument de certaines commandes. Pour empêcher la dislocation de ces commandes l’une des solutions est de les précéder de la commande \protect.
Par exemple, lorsque LaTeX exécute la commande \section{nom-rubrique} il écrit le texte nom-rubrique dans le fichier auxiliaire .aux, de sorte à pouvoir le tirer de là pour l’utiliser dans d’autres parties du document comme la table des matières. On appelle argument mouvant tout argument qui est développé en interne par LaTeX sans être directement composé en sortie. Une commande est dite fragile si elle se développe pendant ce processus en un code TeX non valide. Certains exemples d’arguments mouvants sont ceux qui apparaissent au sein des commandes \caption{...} (voir figure), dans la commande \thanks{...} (voir \maketitle), et dans les expressions en @ des environnements tabular et array (voir tabular).
Si vous obtenez des erreurs étranges de commandes utilisées au sein d’arguments mouvants, essayez des les précéder d’un \protect. Il faut un \protect pour chacune des commandes fragiles.
Bien qu’en général la commande \protect ne fait pas de mal, les commandes de gestion de longueurs sont robustes et ne devraient pas être précédées d’une commande \protect. Une commande \protect ne peut pas non plus être utilisée au sein de l’argument d’une commande \addtocounter ou \setcounter.
Dans l’exemple qui suit la commande \caption produit une erreur mystérieuse

\begin{figure}
  ...
  \caption{Company headquarters of A\raisebox{1pt}{B}\raisebox{-1pt}{C}}
\end{figure}

Dans l’exemple suivant la commande \tableofcontents produit une erreur à cause du \(..\) dans le titre de section qui se développe en code incorrect TeX dans le fichier .toc. Vous pouvez résoudre ceci en remplaçant \(..\) par \protect\(..\protect\).

\begin{document}
\tableofcontents
...
\section{Einstein's \( e=mc^2 \)}
...

\ignorespaces & \ignorespacesafterend
Synopsis :

\ignorespaces

ou

\ignorespacesafterend

Les deux commandes ont pour effet que LaTeX ignore l’espace blanc après la commande et jusqu’à rencontrer une boîte ou un caractère non blanc. La première commande est une commande primitive de TeX, et la seconde est spécifique à LaTeX.
La commande \ignorespaces est souvent utilisée quand on définit des commandes au moyen de \newcommand, ou \newenvironment, ou \def. Ceci est illustré par l’exemple plus bas. Il permet à un utilisateur d’afficher dans la marge combien de points rapporte chaque questions d’un questionnaire, mais il est malcommode parce que, comme illustré dans la liste enumerate, l’utilisateur ne doit pas mettre d’espace entre la commande et le texte de la question.

\newcommand{\points}[1]{\makebox[0pt]{\makebox[10em][l]{#1~pts}}
\begin{enumerate}
  \item\points{10}aucun espace superflu inséré ici
  \item\points{15} ici un espace superflu entre le nombre et le mot « ici »
\end{enumerate}

La solution est de modifier comme ci-dessous :

\newcommand{\points}[1]{%
  \makebox[0pt]{\makebox[10em][l]{#1~pts}}\ignorespaces}

Dans le second exemple on illustre comment l’espace blanc est enlevé de devant le texte. Les commandes ci-dessous permettent à utilisateur d’attacher uniformément une civilité à un nom. Mais si, quand il est donné, une civilité commence accidentellement par un espace alors \nomcomplet le reproduira.

\newcommand{\honorific}[1]{\def\honorific{#1}} % mémorise le titre
\newcommand{\fullname}[1]{\honorific~#1}   % met le titre devant le nom

\begin{tabular}{|l|}
\honorific{M./Mme}  \fullname{Jean} \\  % sans espace superflu
\honorific{ M./Mme} \fullname{Jean}     % espace superflu devant la civilité
\end{tabular}

Pour réparer cela, modifier le en \newcommand{\fullname}[1]{\ignorespaces\honorific~#1}.
Le \ignorespaces est aussi souvent utilisé dans un \newenvironment à la fin de la clause begin, comme dans \begin{newenvironment}{env name}{... \ignorespaces}{...}.
Pour enlever l’espace blanc venant immédiatement après un environnement utilisez \ignorespacesafterend. Dans l’exemple ci-dessous on affiche un espace vertical bien plus grand entre le premier et le deuxième environnements qu’entre le deuxième et le troisième.

\newenvironment{eq}{\begin{equation}}{\end{equation}}
\begin{eq}
e=mc^2
\end{eq}
\begin{equation}
F=ma
\end{equation}
\begin{equation}
E=IR
\end{equation}

On peut faire disparaître l’espace vertical en mettant un caractère % de commentaire immédiatement après le \end{eq}, mais cela est malcommode. La solution est de modifier en \newenvironment{eq}{\begin{equation}}{\end{equation}\ignorespacesafterend}.

xspace package
Synopsis :

\usepackage{xspace}
  ...
\newcommand{...}{...\xspace}

La macro \xspace, quand utilisée à la fin de la définition d’une commande, ajoute une espace à moins que la commande soit suivie de certains caractères de ponctuation.
Après la séquence de contrôle d’une commande qui est un mot de contrôle (voir Control sequences, contrairement aux symboles de contrôle tels que \$), TeX avale les caractères blancs. Ainsi, dans la première phrase ci-dessous, en sortie on a ‘Provence’ placé parfaitement contre le point, sans espace entre les deux.

\newcommand{\PR}{Provence}
Notre école est en \PR .
Les étés en \PR{} sont agréables.

Mais à cause de l’avalement, la seconde phrase a besoin de l’adjonction d’accolades vides {}, sans quoi il n’y aurait pas d’espace entre ‘Provence’ et ‘sont’. (Beaucoup d’auteurs utilisent plutôt un \ pour cela. Voir \(SPACE).)
Le paquetage xspace fournit la commande \xspace. Elle sert à écrire des commandes conçues pour être utilisées essentiellement dans du texte. Elle doit être placée à la toute fin de la définition de ces commandes. Elle insère un espace après la commande à moins que ce qui la suive immédiatement soit dans une liste d’exceptions. Dans l’exemple suivant, on peut se passer de l’adjonction d’accolades vides.

\newcommand{\PR}{Provence\xspace}
Notre école est en \PR .
Les étés en \PR{} sont agréables.

La liste d’exceptions par défaut contient les caractères ,.'/?;:!~-), ainsi que l’accolade ouvrante, la commande controblique-espace discutée plus haut, et les commandes \footnote ou \footnotemark. On peut ajouter des éléments à cette liste comme avec \xspaceaddexceptions{\manotebdpi \manotebdpii} qui rajoute les séquences de contrôle \manotebdpi et \manotebdpii à la liste, et retrancher un élément de la liste comme avec \xspaceremoveexception{!}.
Comment : nombre d’experts préfèrent ne pas utiliser \xspace. La mettre dans une définition signifie que la commande sera en général suivie du bon espacement. Mais il n’est pas aisé de prédire quand ajouter les accolades vides {} parce que \xspace se sera trompé, comme lorsque elle est suivie d’une autre commande, et donc \xspace peut rendre l’édition d’une matière plus difficile et plus faillible que de mettre systématiquement les accolades vides.