easylist es un paquete (de Paul Isambert, distribuido en CTAN bajo LPPL) donde expresas listas profundamente anidadas por el *número de caracteres marcadores* al comienzo de cada línea. El estándar de anidamiento itemize o enumerate se detiene en cuatro niveles, pero easylist no tiene límite de profundidad. Su punto fuerte es escribir listas de 5 y 6 niveles de forma concisa, ideal para documentos legales y esquemas finamente estructurados.
El recuento de marcadores es el nivel
Una lista anidada normal se apila \begin{itemize} … \item … \end{itemize} más profundamente en cada nivel. easylist toma un rumbo completamente diferente. Dentro de \begin{easylist}… \end{easylist}, el número de caracteres marcadores al inicio de una línea *es* el nivel de ese elemento. Un marcador significa nivel 1, dos significa nivel 2, tres significa nivel 3, y así sucesivamente: sin \item, sin entornos anidados.
El marcador es un único carácter activo: tiene un significado especial solo dentro del entorno easylist y vuelve a su estado normal en el exterior. El marcador predeterminado es el signo de sección §, pero debido a que es complicado escribirlo, una opción \usepackage le permite cambiar a un carácter más fácil (ver más abajo). En esta página utilizamos # como marcador, como se supone en todo momento. Para obtener #, cargue el paquete como \usepackage[sharp]{easylist}.
Aquí hay un ejemplo mínimo usando # como marcador. Una línea con un # es el nivel 1, ## es el nivel 2, ### es el nivel 3. Siempre coloque un espacio justo después de la serie de marcadores; sin él, no se imprime ningún número. Cada marcador también inicia una nueva línea automáticamente, por lo que ejecutar elementos juntos en una línea da el mismo resultado.
\documentclass{article}
\usepackage[sharp]{easylist}
\begin{document}
\begin{easylist}
# First proposition.
## Interesting comment.
### A note on the comment.
### Another note.
#### By the way...
# Let's start something new.
\end{easylist}
\end{document}Al procesar esto se numeran los elementos automáticamente por profundidad, con separadores de período: 1 / 1.1 / 1.1.1 / 1.1.2 / 1.1.2.1 / 2. Si omite un nivel, el nivel omitido cuenta como 0 (por ejemplo, un elemento de nivel 3 justo después de un elemento de nivel 1 se convierte en 1.0.1).
Elección del marcador: por qué existe [at]
Eliges el marcador con una opción de paquete. Sin ninguno, es §; [pilcrow] da ¶, [sharp] da #, [at] da @ y [ampersand] da &. El uso es idéntico cualquiera que elijas: el carácter seleccionado se activa solo entre \begin{easylist} y \end{easylist}.
| Opción | Marcador | |
|---|---|---|
(none) | § (signo de sección, predeterminado) | predeterminado |
pilcrow | ¶ (pilcrow) | \usepackage[pilcrow]{easylist} |
sharp | # (signo numérico) | \usepackage[sharp]{easylist} |
at | @ (arroba) | \usepackage[at]{easylist} |
ampersand | & (ampersand) | \usepackage[ampersand]{easylist} |
Vale la pena preguntar por qué se proporciona [at] (@). # es el carácter de parámetro de LaTeX en las definiciones de macro (#1, #2,…) y tiene un significado especial en tabular y en otros lugares. Por lo tanto, elegir # como marcador invita a choques dentro de definiciones y tablas de macros. Para empezar, los personajes activos son complicados y se portan mal dentro de las cajas. En esas situaciones, es más seguro cambiar a un marcador menos propenso a conflictos como [at] (@) o [ampersand] (&).
Si debe combinar un marcador fácil con comandos usados dentro del entorno, defina esos comandos fuera del entorno easylist, o use \Activate y \Deactivate (que activan/inactivo el marcador) dentro de la lista. Por defecto se crean diez niveles de contadores; para profundizar más, aumente la cuenta con una opción numérica como \usepackage[50]{easylist}.
Estilo con \ListProperties
La numeración, las marcas, la sangría y el resto del diseño se controlan conjuntamente mediante \ListProperties(...). Escribe key=value pares separados por comas dentro de los paréntesis, y \ListProperties afecta a todos los elementos y listas posteriores. Muchas claves tienen una forma numerada por nivel: Numbers se aplica a todos los niveles, Numbers3 al nivel 3 únicamente (en general, key + número de nivel). Restablezca los valores predeterminados con \NewList.
| Clave | Qué hace | |
|---|---|---|
Numbers / Numbersn | Estilo numérico. a=árabe (predeterminado), r/R=romano inferior/superior, l/L=letras inferiores/superiores, z=Zapf Dingbats | Se permiten estilos por nivel |
Mark / FinalMark | Puntuación entre contadores (período predeterminado). FinalMark es la marca después del último contador | por ej. \ListProperties(Mark=.,FinalMark=) |
Style / Stylen | Tipografía de número y texto. * apunta solo al número, ** solo al texto | Pase \bfseries, \color{blue}, etc. |
Hide / Hiden | Ocultar los primeros n contadores; te permite hacer listas sin numerar | Hide=10000 oculta todos los niveles |
Start / Startn* | Valor inicial del contador; el formulario * lo vincula a un contador externo (por ejemplo, \thesection) | \ListProperties(Start1*=\thesection) |
Progressive / Progressive* | El margen izquierdo crece con la profundidad; el formulario * mantiene el nivel 1 en el margen actual | \ListProperties(Progressive*=.5cm) |
Space / Space* | Espacio vertical entre elementos; el formulario * está entre elementos del mismo nivel | Los valores negativos compactan la lista. |
Por ejemplo, \ListProperties(Numbers3=l, FinalMark=) hace que el nivel 3 utilice la numeración de letras a, b, c… y elimina el punto final. Para usar una coma literal o un paréntesis de cierre en un valor, envuélvalo entre llaves, como en \ListProperties(FinalMark={)}). Otras teclas permiten realizar ajustes finos: Hang (dejar que el texto cuelgue del número), Align (alinear elementos al mismo nivel), Margin/Indent (margen izquierdo y sangría de párrafo), FinalSpace (espacio entre número y texto, predeterminado .3em) y CtrCom (envolver el número entero en un comando como \fbox).
Un ejemplo profundamente anidado
Sin límite de profundidad, puede escribir estructuras de cinco niveles y más profundas, como cláusulas de contrato, directamente. El siguiente ejemplo pone el nivel 1 en negrita, el nivel 2 en números romanos y el nivel 3 en letras minúsculas, sangrando progresivamente según la profundidad. Tenga en cuenta que agregar un solo carácter marcador lo llevará a un nivel más profundo.
\documentclass{article}
\usepackage[sharp]{easylist}
\begin{document}
\ListProperties(Style1*=\bfseries, Numbers2=R, Numbers3=l,
Progressive=1.5em, Space*=2pt)
\begin{easylist}
# Agreement.
## Definitions.
### Party means a signatory hereto.
### Effective Date means the date of last signature.
## Term and termination.
### This Agreement begins on the Effective Date.
#### Either party may terminate on 30 days notice.
##### Notice must be given in writing.
# Miscellaneous.
\end{easylist}
\end{document}En este ejemplo, los números de nivel 1 son 1 y 2 (negrita, árabe), el nivel 2 son mayúsculas romanas y el nivel 3 son letras minúsculas, compuestas como 1.I.a, 1.II.a. Los niveles 4 y 5 se sangran más y aparecen simplemente escribiendo #### y ##### . Escribir la misma estructura con enumerate anidado se bloquearía en cuatro niveles y necesitaría una configuración adicional (por ejemplo, con enumitem) para profundizar; con easylist simplemente agrega un marcador.
Cuándo alcanzarlo
easylist es un nicho, pero es una alternativa bienvenida cuando se alcanza el límite de cuatro niveles de las listas estándar. Brilla cuando desea enumerar elementos que sean a la vez numerados y profundos: documentos legales, términos, especificaciones y esquemas con muchos niveles. Para listas superficiales ordinarias, niveles con muchos estilos o listas en línea, itemize/enumerate o enumitem son más naturales. Debido a que el marcador # puede chocar con macros y tablas, es más seguro en una lista autónoma a nivel de prosa.