Definiciones
LaTeX tiene soporte para crear nuevos comandos de muchos tipos diferentes.

\newcommand y \renewcommand
Sinopsis, una de (tres formas regulares, tres formas destacadas):

\newcommand{\cmd}{defn}
\newcommand{\cmd}[nargs]{defn}
\newcommand{\cmd}[nargs][optargdefault]{defn}
\newcommand*{\cmd}{defn}
\newcommand*{\cmd}[nargs]{defn}
\newcommand*{\cmd}[nargs][optargdefault]{defn}

o todas las mismas posibilidades con \renewcommand en lugar de \newcommand:

\renewcommand{\cmd}{defn}
\renewcommand{\cmd}[nargs]{defn}
\renewcommand{\cmd}[nargs][optargdefault]{defn}
\renewcommand*{\cmd}{defn}
\renewcommand*{\cmd}[nargs]{defn}
\renewcommand*{\cmd}[nargs][optargdefault]{defn}

Define o redefine un comando (ve también \DeclareRobustCommand en Comandos class y package).
La forma estrellada de estos dos prohíbe que los argumentos contengan varios párrafos de texto (en términos simples de TeX: los comandos no son \long). Con la forma predeterminada, los argumentos pueden ser varios párrafos.
Estos son los parámetros (a continuación se muestran algunos ejemplos):
cmd 	Requerido; \cmd es el nombre del comando. Debe comenzar con una barra invertida, \, y no debe comenzar con la cadena de cuatro caracteres \end. Para \newcommand, no debe estar ya definido. Para \renewcommand, este nombre ya debe estar definido.
nargs 	Opcional; un número entero de 0 a 9, especificando el número de argumentos que toma el comando, incluido cualquier argumento opcional. Omitir este argumento es lo mismo que especificar 0, lo cual significa que el comando no tiene argumentos. Si redefines un comando, la nueva versión puede tener un diferente número de argumentos que la versión anterior.
optargdefault 	 Opcional; si este argumento está presente entonces el primer argumento de \cmd es opcional, con valor predeterminado optargdefault (que puede ser la cadena vacía). Si optargdefault no está presente entonces \cmd no toma un argumento opcional.
Es decir, si \cmd se llama con el siguiente argumento entre corchetes, como en \cmd[optval]{...}..., entonces dentro de defn, el parámetro #1 se establece en optval. Por otro lado, si \cmd se llama sin los siguientes corchetes entonces dentro de defn se establece el parámetro #1 a optargdefault. En cualquier caso, los argumentos requeridos comienzan con #2.
Omitir [optargdefault] de la definición es completamente diferente de dar los corchetes con contenido vacío, como en []. El primero dice que el comando que se define no requiere un argumento opcional, por lo que #1 es el primer argumento requerido (si nargs ≥ 1); este último establece el argumento opcional #1 a la cadena vacía como valor predeterminado, si no hay un argumento opcional dado en la llamada.
De manera similar, omitir [optval] de una llamada también es completamente diferente de dar los corchetes con contenido vacío. El anterior establece #1 al valor de optval (suponiendo que el comando se definió para tomar un argumento opcional); el último #1 configurado a la cadena vacía, al igual que con cualquier otro valor.
Si un comando no está definido para tomar un argumento opcional, pero es llamado con un argumento opcional, los resultados son impredecibles: allí puede haber un error de LaTeX, puede haber una salida tipográfica incorrecta, o ambos.
defn 	 Requerido; el texto que se sustituirá por cada aparición de \cmd. Los parámetros #1, #2, …, #nargs se reemplazan por los valores proporcionados cuando se llama al comando (o por optargdefault en el caso de un argumento opcional no especificado en la llamada, como se acaba de explicar).
TeX ignora los espacios en blanco en la fuente después de una secuencia de control (véase Secuencias de control), como en ‘\cmd ’. Si quieres un espacio allí, una solución es escribir {} después del comando (‘\cmd{} ’), y otra solución es usar un espacio de control explícito (‘\cmd\ ’).
Un ejemplo simple de definición de un nuevo comando: \newcommand{\RS}{Robin Smith} da como resultado que \RS sea reemplazado por el texto más largo. Redefinir un comando existente es similar: \renewcommand{\qedsymbol}{{\small QED}}.
Si usas \newcommand y el nombre del comando ya se ha usado entonces obtienes algo como ‘Error de LaTeX: Comando \fred ya definido. O nombre \end... ilegal, ve la p.192 del manual’. De manera similar, si usas \renewcommand y el nombre del comando no se ha definido, obtienes algo como ‘Error de LaTeX: \hank no se ha definido’.
Aquí la primera definición crea un comando sin argumentos, y la segunda, un comando con un argumento requerido:

\newcommand{\student}{Ms~O'Leary}
\newcommand{\defref}[1]{Definición~\ref{#1}}

Usa el primero como en Te recomiendo \student{}. El segundo tiene un argumento variable, por lo que \defref{def:basis} se expande a Definición~\ref{def:basis}, que finalmente se expande a algo así como ‘Definición~3.14’.
Del mismo modo, pero con dos argumentos obligatorios: \newcommand{\nbym}[2]{$#1 \times #2$} se invoca como \nbym{2}{k}.
Este ejemplo tiene un argumento opcional.

\newcommand{\salutation}[1][Señor o señora]{Estimado #1:}

Entonces \salutation da ‘Estimado señor o señora:’ mientras \salutation[John] da ‘Querido John:’. Y \salutation[] da ‘Estimado :’.
Este ejemplo tiene un argumento opcional y dos argumentos obligatorios.

\newcommand{\lawyers}[3][empresa]{#2, #3 y~#1}
Empleo a \lawyers[Howe]{Dewey}{Cheatem}.

El resultado es ‘Empleo Dewey, Cheatem y Howe’. El argumento opcional, Howe, está asociado con #1, mientras que Dewey y Cheatem están asociados con #2 y #3. Debido al argumento opcional, \lawyers{Dewey}{Cheatem} dará la salida ‘Empleo Dewey, Cheatem y Howe’.
Las llaves alrededor de defn no definen un grupo, es decir, no delimitan el alcance del resultado de expandir defn. Por ejemplo, con \newcommand{\shipname}[1]{\it #1}, en esta oración,

El \shipname{Monitor} se encontró con el \shipname{Merrimac}.

las palabras ‘se encontró con el’, y el punto, estarían incorrectamente en cursiva. La solución es poner otro par de corchetes dentro de la definición: \newcommand{\shipname}[1]{{\it #1}}.

Secuencia de control, palabra de control y símbolo de control
Al leer la entrada TeX convierte el flujo de caracteres leídos en una secuencia de tókenes. Cuando TeX ve una barra invertida \, la hará manejar los siguientes caracteres de una manera especial para hacer un token de secuencia de control.
Las secuencias de control se dividen en dos categorías:
palabra de control, cuando la secuencia de control se obtiene de una \ seguida de al menos una letra ASCII (A-Z y a-z), seguida de al menos una no letra.
símbolo de control, cuando la secuencia de control se obtiene de una \ seguida de un carácter que no sea una letra.
La secuencia de caracteres que se encuentran después de una \ también se denominan el nombre de la secuencia de control.
Los espacios en blanco después de una palabra de control se ignoran y no producen espacio en blanco en la salida (véase \newcommand y \renewcommand y \(SPACE)).
Así como el comando \relax no hace nada, la siguiente entrada simplemente imprimirá ‘¡Hola!’ :

¡Hol\relax   
   a!

Esto se debe a que los espacios en blanco después de \relax, incluida la nueva línea, son ignorados, y los espacios en blanco al principio de una línea también son ignorados (véase Espacios en blanco iniciales).

\providecommand
Sinopsis, una de:

\providecommand{\cmd}{defn}
\providecommand{\cmd}[nargs]{defn}
\providecommand{\cmd}[nargs][optargdefault]{defn}
\providecommand*{\cmd}{defn}
\providecommand*{\cmd}[nargs]{defn}
\providecommand*{\cmd}[nargs][optargdefault]{defn}

Define un comando, siempre que no exista ningún comando con este nombre. Si no existe ningún comando con este nombre, esto tiene el mismo efecto que \newcommand. Si ya existe un comando con este nombre, entonces esta definición no hace nada. Esto es particularmente útil en un archivo que se puede cargar más de una vez, como un archivo de estilo. Véase \newcommand y \renewcommand, para la descripción de los argumentos.
Este ejemplo

\providecommand{\myaffiliation}{Colegio de San Miguel}
\providecommand{\myafiliation}{Lyc\'ee Henri IV}
De \myafiliation.

produce ‘De Saint Michael's College.’ A diferencia de \newcommand, el uso repetido de \providecommand para (intentar) definir \myaffiliation no da error.

\makeatletter y \makeatother
Sinopsis:

\makeatletter
  ... definición de comandos con @ en su nombre ..
\makeatother

Usa este par cuando redefines los comandos de LaTeX que se nombran con un carácter arroba ‘@’. La declaración \makeatletter hace que el carácter de arroba tenga el código de categoría de una letra, code 11. La declaración \makeatother establece el código de categoría del signo de arroba a code 12, su valor predeterminado.
A medida que TeX lee caracteres, asigna a cada uno un código de categoría, o catcode. Por ejemplo, asigna el carácter ‘\’ de barra invertida el catcode 0. Nombres de comandos constan de un carácter categoría 0, normalmente barra invertida, seguido por letras, caracteres de categoría 11 (excepto que un nombre de comando también puede constar de un carácter categoría 0 seguido de un solo símbolo que no es una letra).
El código fuente de LaTeX tiene la convención de que algunos comandos usan @ en su nombre. Estos comandos están destinados principalmente a escritores de paquete o de clase. La convención impide que los autores que solo utilizan un paquete o clase reemplacen accidentalmente dicho comando con uno de ellos mismos, porque de manera predeterminada el signo de arroba tiene el catcode 12.
Usa el par \makeatletter y \makeatother dentro de un .tex, generalmente en el preámbulo, cuando estás definiendo o redefiniendo comandos nombrados con @, haciendo que rodeen tu definición. No los uses dentro de los archivos .sty o .cls ya que los comandos \usepackage y \documentclass ya disponen que la arroba tenga el código de carácter de una letra, catcode 11.
Para obtener una lista completa de macros con un signo de arroba en sus nombres, consulta https://ctan.org/pkg/macros2e.
En este ejemplo, el archivo de clase tiene un comando \thesis@universityname que el usuario quiere cambiar. Estas tres líneas deben ir en el preámbulo, antes del \begin{document}.

\begin{document}.
\makeatletter
\renewcommand{\thesis@universityname}{Colegio de San Miguel}
\makeatother

\@ifstar
Sinopsis:

\newcommand{\mycmd}{\@ifstar{\mycmd@star}{\mycmd@nostar}}
\newcommand{\mycmd@nostar}[nostar-num-args]{nostar-body}
\newcommand{\mycmd@star}[star-num-args]{star-body}

Muchos entornos o comandos estándar de LaTeX tienen una variante con el mismo nombre pero terminando con un carácter de estrella *, un asterisco. Algunos ejemplos son los entornos table y table* y los comandos \section y \section*.
Al definir entornos, seguir este patrón es sencillo porque \newenvironment y \renewenvironment permiten que el nombre del entorno contenga una estrella. Entonces solo tienes que escribir \newenvironment{myenv} o \newenvironment{myenv*} y continúa la definición de la manera habitual. Para los comandos la situación es más compleja ya que la estrella no es una letra no puede ser parte del nombre del comando. Como en la sinopsis anterior, habrá un comando llamado por el usuario, dado anteriormente como \mycmd, que mira hacia delante para ver si le sigue una estrella. Por ejemplo, LaTeX realmente no tiene un comando \section*; en cambio, el comando \section mira hacia adelante. Este comando no acepta argumentos, sino que se expande a uno de los dos comandos que aceptan argumentos. En la sinopsis estos dos son \mycmd@nostar y \mycmd@star. Podrían tomar el mismo número de argumentos o un número diferente, o ningún argumento en absoluto. Como siempre, en un documento LaTeX un comando usando una arroba @ en su nombre se debe encerrar dentro de un bloque \makeatletter ... \makeatother (véase \makeatletter y \makeatother).
Este ejemplo de \@ifstar define el comando \ciel y una variante \ciel*. Ambos tienen un argumento obligatorio. Una llamada a \ciel{blue} devolverá "cielo azul no estrellado" mientras \ciel*{night} devolverá "cielo nocturno estrellado".

\makeatletter
\newcommand*{\ciel@unstarred}[1]{no estrellado #1 cielo}
\newcommand*{\ciel@starred}[1]{cielo estrellado #1}
\newcommand*{\ciel}{\@ifstar{\ciel@starred}{\ciel@unstarred}}
\makeatother

En el siguiente ejemplo, la variante destacada toma un número diferente de argumentos que el sin estrella. Con esta definición, el Agente 007 ``Mi nombre es \agentsecret*{Bond}, \agentsecret{James}{Bond}.'' es equivalente a ingresar los comandos ``Mi nombre es \textsc{Bond}, \textit{James} textsc{Bond}.''

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

Después de un nombre de comando, una estrella se maneja de manera similar a un argumento opcional. (Esto difiere de los nombres de entornos en los que la estrella es parte del nombre mismo y como tal podría estar en cualquier posición). Por lo tanto, técnicamente es posible poner cualquier número de espacios entre el comando y la estrella. Así \agentsecret*{Bond} y \agentsecret *{Bond} son equivalentes. Sin embargo, la práctica estándar es no insertar tales espacios.
Hay dos formas alternativas de realizar el trabajo de \@ifstar. (1) El paquete suffix permite la construcción \newcommand\mycommand{variante-sin-estrella} seguida por \WithSuffix\newcommand\mycommand*{starred-variant}. (2) LaTeX proporciona el paquete xparse, que permite este código:

\NewDocumentCommand\foo{s}{\IfBooleanTF#1
  {variante-con-estrella}%
  {variante-sin-estrella}%
  }

\newcounter: Asignar un contador
Sinopsis, una de:

\newcounter{countername}
\newcounter{countername}[supercounter]

Define globalmente un nuevo contador llamado countername y lo inicializa a cero (véase Contadores).
El nombre countername debe constar únicamente de letras. No comienza con una barra invertida. Este nombre no debe estar ya en uso por otro contador.
Cuando usas el argumento opcional [supercounter] entonces el contador countername se restablecerá a cero siempre que supercounter se incrementa. Por ejemplo, ordinariamente subsection está numerado dentro de section para que cada vez que incremente sección, ya sea con \stepcounter (véase \stepcounter) o \refstepcounter (véase \refstepcounter), entonces LaTeX restablecerá subsection a cero.
Este ejemplo

\newcounter{asuper}  \setcounter{asuper}{1}
\newcounter{asub}[asuper] \setcounter{asub}{3}   % Nota `asuper'
El   valor  de   asuper  es   \arabic{asuper}  y   el  de   asub  es
\arabic{asub}.
\stepcounter{asuper}
Ahora   asuper    es   \arabic{asuper}   mientras   que    asub   es
\arabic{asub}.

produce ‘El valor de asuper es 1 y el de asub es 3’ y ‘Ahora asuper es 2 mientras que asub es 0’.
Si el contador ya existe, por ejemplo ingresando asuper dos veces, obtienes algo como ‘Error LaTeX: Comando \c@asuper Ya definido. O name \end... ilegal, ve la p.192 del manual.’.
Si usas el argumento opcional, entonces el súper contador ya debe existir. Al ingresar \newcounter{jh}[lh] cuando lh no es un contador definido obtendrás ‘Error LaTeX: Sin contador 'lh' definido.’

\newlength
Sinopsis:

\newlength{\len}

Asigna un nuevo registro de longitud (véase Longitudes). El argumento requerido \len tiene que ser una secuencia de control (véase Secuencias de control), y como tal debe comenzar con una barra invertida, \ bajo circunstancias normales. El nuevo registro contiene longitudes elásticas como 72.27pt o 1in plus.2in minus.1in (una longitud de registro LaTeX es lo que TeX llama un skip de registro). El valor inicial es cero. La secuencia de control \len no debe estar definida ya.
Un ejemplo:

\newlength{\graphichgt}

Si olvidas la barra invertida, obtienes ‘Insertada secuencia de control faltante’. Si la secuencia de control ya existe, entonces obtienes algo así como ‘Error LaTeX: Comando \graphichgt ya definido. O nombre \end... ilegal, ve la p.192 del manual’.

\newsavebox
Sinopsis:

\newsavebox{\cmd}

Define \cmd, la cadena que consta de una barra invertida seguida de cmd, para referirse a un nuevo contenedor para almacenar material. Estos contenedores contienen material que ha sido compuesto, para usar varias veces o para medir o manipular (véase Cajas). El nombre del contenedor \cmd es obligatorio, debe comenzar con una barra invertida, \, y no debe ser un comando definido. Este comando es frágil (véase \protect).
Esto asigna un contenedor y luego coloca material tipográfico en él.

\newsavebox{\logobox}
\savebox{\logobox}{LoGo}
Nuestro logo es \usebox{\logobox}.

La salida es ‘Nuestro logotipo es LoGo’.
Si ya hay un contenedor definido, obtienes algo como ‘Error de LaTeX: Comando \logobox ya definido. O nombre \end... ilegal, ve la p.192 del manual’.
La asignación de una caja es global.

\newenvironment y \renewenvironment
Sinopsis, una de:

\newenvironment{env}{begdef}{enddef}
\newenvironment{env}[nargs]{begdef}{enddef}
\newenvironment{env}[nargs][optargdefault]{begdef}{enddef}
\newenvironment*{env}{begdef}{enddef}
\newenvironment*{env}[nargs]{begdef}{enddef}
\newenvironment*{env}[nargs][optargdefault]{begdef}{enddef}

o uno de estos.

\renewenvironment{env}{begdef}{enddef}
\renewenvironment{env}[nargs]{begdef}{enddef}
\renewenvironment{env}[nargs][optargdefault]{begdef}{enddef}
\renewenvironment*{env}{begdef}{enddef}
\renewenvironment*{env}[nargs]{begdef}{enddef}
\renewenvironment*{env}[nargs][optargdefault]{begdef}{enddef}

Definir o redefinir el entorno env, es decir, crear el constructor \begin{env} ... body ... \end{env}.
La forma de asterisco de estos comandos requiere que los argumentos no contienen varios párrafos de texto. Sin embargo, el cuerpo de estos entornos pueden contener varios párrafos.
env 	Requerido; el nombre del entorno. Se compone sólo de letras o el carácter forma-* y, por lo tanto, no comienza con una barra invertida, \. No debe comenzar con la cadena end. Para \newenvironment, el nombre env no debe ser el nombre de un entorno ya existente, y también el comando \env debe ser indefinido. Para \renewenvironment, env debe ser el nombre de un entorno existente.
nargs 	Opcional; un número entero de 0 a 9 que indica el número de argumentos que toma el entorno. Cuando usas el entorno, estos argumentos aparecen después de \begin, como en \begin{env}{arg1} ... {argn}. Omitiendo esto es equivalente a establecerlo en 0; el entorno no tendrá argumentos. Al redefinir un entorno, la nueva versión puede tener un diferente número de argumentos que la versión anterior.
optargdefault 	Opcional; si esto está presente, entonces el primer argumento del entorno definido es opcional, con el valor predeterminado optargdefault (que puede ser la cadena vacía). Si esto no está en la definición, entonces el entorno no acepta un argumento opcional.
Es decir, cuando optargdefault está presente en la definición del entorno entonces puedes comenzar el entorno con corchetes, como en \begin{env}[optval]{...} ... \end{env}. En este caso, dentro de begdefn el parámetro #1 se establece en el valor de optval. Si llamas a \begin{env} sin corchetes, luego dentro de begdefn el parámetro #1 es establecido en el valor predeterminado optargdefault. En cualquier caso, cualquier argumento requerido comienza con #2.
Omitir [myval] en la llamada es diferente a tener corchetes sin contenido, como en []. Los resultados anteriores en #1 expandiéndose a optargdefault; esto último resulta en #1 expandiéndose a la cadena vacía.
begdef 	Requerido; el texto se expande en cada aparición de \begin{env}. Dentro de begdef, los parámetros #1, #2, ... #nargs, se sustituyen por los valores que proporcionas cuando llamas al entorno; ve los ejemplos abajo.
enddef 	Requerido; el texto se expande en cada aparición de \end{env}. Esto no puede contener ningún parámetro, es decir, no puedes usar #1, #2, etc., aquí (pero ve el ejemplo final a continuación).
Todos los entornos, es decir el código begdef, el entorno body y el código enddef se procesan dentro de un grupo. Así, en el primer ejemplo a continuación, el efecto de \small se limita a la cotización y no se extiende al material siguiendo el entorno.
Si intentas definir un entorno y el nombre ya se ha utilizado entonces obtienes algo como ‘Error de LaTeX: Comando \fred ya definido. O nombre \end... ilegal, ve la p.192 del manual’. Si intentas redefinir un entorno y el nombre aún no se ha utilizado, entonces obtienes algo como ‘Error de LaTeX: Entorno hank indefinido.’.
Este ejemplo proporciona un entorno como quotation de LaTeX excepto que se establecerá en letra más pequeña.

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

Esto tiene un argumento, que está en negrita al comienzo de un párrafo.

\newenvironment{point}[1]{%
  \noindent\textbf{#1}
}{%
}

Este muestra el uso de un argumento opcional; da un entorno quotation que cita el autor.

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

El nombre del autor es opcional y de manera predeterminada es ‘Shakespeare’. En el documento, utiliza el entorno como este.

\begin{citequote}[Lincoln]
  ...
\end{citequote}

El último ejemplo muestra cómo guardar el valor de un argumento para usarlo en enddef, en este caso en una caja (véase \sbox y \savebox).

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

\newtheorem
Sinopsis:

\newtheorem{name}{title}
\newtheorem{name}{title}[numbered_within]
\newtheorem{name}[numbered_like]{title}

Define un nuevo entorno similar a un teorema. Puedes especificar uno de numbered_within y numbered_like, o ninguno, pero no ambos.
La primera forma, \newtheorem{name}{title}, crea un entorno que se etiquetará con title; ve el primer ejemplo a continuación.
La segunda forma, \newtheorem{name}{título}[numbered_within], crea un entorno cuyo contador está subordinado al counter existente numbered_within, por lo que este contador se restablecerá cuando numbered_within se restablece. Ve el segundo ejemplo a continuación.
La tercera forma \newtheorem{name}[numbered_like]{title}, con un argumento opcional entre los dos argumentos requeridos, crea un entorno cuyo contador compartirá el contador definido previamente numbered_like. Ve el tercer ejemplo.
Este comando crea un contador llamado name. Además, a menos que se use el argumento opcional numbered_like, dentro del entorno similar a un teorema, el valor actual de \ref será el de \thenumbered_within (véase \ref).
Esta declaración es global. Es frágil (véase \protect).
Argumentos:
name 	El nombre del entorno. Es una cadena de letras. No debe comenzar con una barra invertida, \. No debe ser el nombre de un entorno existente, y el nombre del comando \name no debe estar definido.
title 	El texto que se imprimirá al principio del entorno, antes del número. Por ejemplo, ‘Teorema’.
numbered_within 	Opcional; el nombre de un contador ya definido, generalmente una unidad seccional como chapter o section. Cuando el contador numbered_within se restablece y luego el entorno name el contador también se restablecerá.
Si no se utiliza este argumento opcional, el comando \thename se establece en \arabic{name}.
numbered_like 	Opcional; el nombre de un entorno similar a un teorema ya definido. El nuevo entorno se numerará en secuencia con numbered_like.
Sin ningún argumento opcional, los entornos están numerados secuencialmente. El siguiente ejemplo tiene una declaración en el preámbulo que da como resultado ‘Definición 1’ y ‘Definición 2’ en producción.

\newtheorem{defn}{Definición}
\begin{document}
\section{...}
\begin{defn}
  Primer definición
\end{defn}

\section{...}
\begin{defn}
  Segunda definición
\end{defn}

Este ejemplo tiene el mismo cuerpo de documento que el anterior. Pero aquí el argumento opcional de \newtheorem numbered_within se da como section, por lo que el resultado es como ‘Definición 1.1’ y ‘Definición 2.1’.

\newtheorem{defn}{Definición}[sección]
\begin{document}
\section{...}
\begin{defn}
  Primer definición
\end{defn}

\section{...}
\begin{defn}
  Segunda definición
\end{defn}

En el siguiente ejemplo hay dos declaraciones en el preámbulo, el segundo de los cuales requiere que el nuevo entorno thm use el mismo contador como defn. Da ‘Definición 1.1’, seguido por ‘Teorema 2.1’ y ‘Definición 2.2’.

\newtheorem{defn}{Definición}[sección]
\newtheorem{thm}[defn]{Teorema}
\begin{document}
\section{...}
\begin{defn}
  Primer definición
\end{defn}

\section{...}
\begin{thm}
  Primer thm
\end{thm}

\begin{defn}
  Segunda definición
\end{defn}

\newfont
Este comando está obsoleto. Esta descripción está aquí solo para ayudar con los viejos documentos. Los nuevos documentos deben definir letras en familias a través del nuevo esquema de selección de letras que te permite, por ejemplo, asociar una negrita con una romana (véase Tipos de letra).
Sinopsis:

\newfont{\cmd}{font description}

Define un comando \cmd que cambiará el tipo de letra actual. La secuencia de control no debe estar ya definida. Debe comenzar con una barra invertida, \.
La descripción de la letra consta de un nombre de letra y una opción cláusula at. LaTeX buscará en tu sistema un archivo llamado fontname.tfm. La cláusula at puede tener la forma en dimen o factor de escala, donde un factor de ‘1000’ significa que no hay escalado. Para los propósitos de LaTeX, todo lo que hace es escalar todos los caracteres y otras dimensiones de fuente relativo al tamaño de diseño de la fuente, que es un valor definido en el archivo .tfm.
Esto define dos tipos de letra equivalentes y algunos caracteres tipográficos en cada una.

\newfont{\testfontat}{cmb10 at 11pt}
\newfont{\testfontscaled}{cmb10 scaled 1100}
\testfontat abc
\testfontscaled abc

\protect
Todos los comandos de LaTeX son frágiles —fragile— o robustos —robust—. Un comando frágil se puede romper cuando se usa en el argumento para ciertos otros comandos. Comandos que contienen datos que LaTeX escribe en un archivo auxiliar y las relecturas posteriores son frágiles. Esto incluye material que va en una tabla de contenido, lista de figuras, lista de tablas, etc. Los comandos frágiles también incluyen saltos de línea, cualquier comando que tenga un argumento opcional, y muchos más. Para evitar que tales comandos rompan, una solución es precederlos con el comando \protect.
Por ejemplo, cuando LaTeX ejecuta \section{nombre sección} escribe el texto nombre sección en el archivo auxiliar .aux, moviéndolo allí para usarlo en otra parte del documento como en la tabla de contenido. Cualquier argumento que sea expandido internamente por LaTeX sin escribirlo directamente es referido como un argumento móvil. Un comando es frágil si se puede expandir durante este proceso en un código TeX no válido. Algunos ejemplos de los argumentos móviles son los que aparecen en el comando \caption{...} (véase figure), en el comando \thanks{...} (véase \maketitle), y en @expresiones en los entornos tabular y array (véase tabular).
Si obtienes extraños errores de los comandos utilizados para mover argumentos, intenta precediéndolos con \protect. Todos los comandos frágiles se deben proteger con su propio \protect.
Aunque por lo general un comando \protect no duele, los comandos de longitud son robustos y no deben estar precedidos por un comando \protect. Tampoco se puede usar un comando \protect en el argumento para los comandos \addtocounter o \setcounter.
En este ejemplo, el comando \caption da un misterioso error sobre una llave extra. Soluciona el problema precediendo a cada comando \raisebox con \protect.

\begin{figure}
  ...
  \caption{Sede de la empresa A\raisebox{1pt}{B}\raisebox{-1pt}{C}}
\end{figure}

En el siguiente ejemplo, el comando \tableofcontents da un error porque los \(..\) en el título de la sección se expande a ilegal TeX en el archivo .toc. Puedes resolver esto cambiando \(..\) a \protect\(..\protect\).

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

\ignorespaces e \ignorespacesafterend
Sinopsis:

\ignorespaces

o

\ignorespacesafterend

Ambos comandos hacen que LaTeX ignore los espacios en blanco (es decir, los caracteres de catcode 10 ​​como espacio o tabulación) después del final del comando hasta el primer cuadro o carácter que no esté en blanco. El primero es un comando primitivo de TeX, y el segundo es específico de LaTeX.
El \ignorespaces se usa a menudo cuando se definen comandos a través de \newcommand, o \newenvironment, o \def. El ejemplo a continuación lo ilustra. Permite a un usuario mostrar los valores de los puntos para las preguntas de la prueba en el margen, pero es un inconveniente porque, como se muestra en la lista enumerate, los usuarios no deben poner ningún espacio entre el comando y el texto de la pregunta.

\newcommand{\points}[1]{\makebox[0pt]{\makebox[10em][l]{#1~pts}}
\begin{enumerate}
  \item\points{10}no hay salida de espacio adicional aquí
  \item\points{15} espacio extra entre el número y el `extra'
\end{enumerate}

La solución es cambiar a esto.

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

Un segundo ejemplo muestra la eliminación de espacios en blanco del frente del texto. Los comandos a continuación permiten a un usuario adjuntar uniformemente un título a los nombres. Pero, tal como se indica, si un título accidentalmente comienza con un espacio, entonces \fullname reproducirá eso.

\newcommand{\honorific}[1]{\def\honorific{#1}} % recuerda el
                                                     % título
\newcommand{\fullname}[1]{\honorific~#1}         % pone el título
                                                     % antes del nombre

\begin{tabular}{|l|}
\honorific{Mr/Ms}  \fullname{Jones} \\  % sin espacio adicional
                                            % aquí
\honorific{ Mr/Ms} \fullname{Jones}     % espacio adicional antes
                                            % del título
\end{tabular}

Para arreglar esto, cambia a \newcommand{\fullname}[1]{\ignorespaces\honorific~#1}.
El \ignorespaces también se usa a menudo en un \newenvironment al final de la cláusula begin, como en \begin{newenvironment}{nombre entorno}{... \ignorespaces}{...}.
Para quitar los espacios en blanco del final de un entorno, usa \ignorespacesafterend. Un ejemplo es que esto mostrará mucho mayor espacio vertical entre el primer y el segundo entorno que entre el segundo y el tercero.

\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}

Poner un carácter de comentario % inmediatamente después del \end{eq} hará desaparecer el espacio vertical, pero eso es inconveniente. La solución es cambiar a \newenvironment{eq}{\begin{equation}}{\end{equation}\ignorespacesafterend}.

paquete xspace
Sinopsis:

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

La macro \xspace, cuando se usa al final de una definición de comando, agrega un espacio a menos que el comando vaya seguido de ciertos caracteres de puntuación.
Después de un comando de secuencia de control que es una palabra de control (véase Secuencias de control, a diferencia de los símbolos de control como \$), TeX engulle caracteres en blanco. Por lo tanto, en la primera oración a continuación, la salida tiene ‘Vermont’ colocado cómodamente contra el punto, sin ningún espacio intermedio.

\newcommand{\VT}{Vermont}
Nuestro colegio está en \VT.
Los veranos \VT{} son agradables.

Pero debido al engullimiento, la segunda oración necesita llaves vacías o de lo contrario no habría espacio que separe a ‘Vermont’ de ‘veranos’. (Muchos autores en su lugar utilizan una barra invertida-espacio \ para esto. Véase \(SPACE)).
El paquete xspace proporciona \xspace. Es para escribir comandos que están diseñados para ser utilizados principalmente en texto. Se debe colocar al final de la definición de estos comandos. Inserta un espacio después de ese comando a menos que lo que siga inmediatamente esté en una lista de excepciones. En este ejemplo, las llaves vacías no son necesarias.

\newcommand{\VT}{Vermont\xspace}
Nuestro colegio está en \VT .
\VT los veranos son agradables.

La lista de excepciones predeterminada contiene los caracteres ,.'/?;:!~-), la llave de apertura y el comando de espacio de barra invertida explicados anteriormente, y los comandos \footnote o \footnotemark. Añaden a esa lista \xspaceaddexceptions{\myfni \myfnii} que agrega \myfni y \myfnii a la lista, y elimina de esa lista como con \xspaceaddexceptions{!}.
Un comentario: muchos expertos prefieren no usar \xspace. Ponerlo en una definición significa que el comando generalmente obtendrá el espaciado correcto. Pero no es fácil predecir cuándo ingresar llaves vacías porque \xspace se equivocará, como cuando le sigue otro comando, por lo que \xspace puede hacer que editar material sea más difícil y más propenso a errores que siempre insertar las llaves vacías.