16 Mar 2021

Listas

Contenido


En md2tex se pueden generar diferentes tipos de listas, siguiendo una sintaxis de Markdown pero con algunas variantes. Cada elemento de la lista puede describirse con una viñeta, un número (ya sea arábigo, alfabético o romano), una descripción o un elemento de estado. Los tipos de listas que se pueden generar son los siguientes:

  • unordered list: son listas itemizadas, se pueden utilizar diferentes viñetas como segundo o tercer parámetro; las viñetas pueden ser: ast, cdot, circ, dash, diamond, star, triangle o bullet. Por defecto se utiliza bullet.
  • ordered list: son listas ordenadas, se pueden utilizar diferentes tipos de numeración como segundo o tercer parámetro; la numeración puede ser: alph, Alph, roman, Roman o arabic. Por defecto se utiliza arabic.
  • nested list: son listas anidadas, se pueden utilizar en casos donde se necesite definir sublistas para cada elemento de la lista; no se admite ningún parámetro adicional.
  • description list: son listas descriptivas (a cada item se le puede agregar una descripción), se puede utilizar en casos donde se necesita que el item no sea una viñeta o un número.
  • todo list: son listas que pueden ilustrar el estado del item, esto puede ser utilizado en casos donde se necesita presentar una lista de cosas, por ejemplo: una lista de tareas donde se puede marcar el estado de cada tarea.

Sintaxis

En este apartado se explica la sintaxis para cada tipo de lista soportada por md2tex.

Unordered List

La sintaxis para estas listas es la siguiente:

[unordered-list; <optional param 1>; <optional param 2>] {
    - <item>
    - <item>
    - <item>
    - <item...>
}
  • El parámetro unordered-list es obligatorio y siempre deberá ser el primero, los parámetros opcionales pueden ser un tipo de viñeta o puede ser el parámetro noitemsep que sirve para quitar la separación por defecto de la lista.
  • Los items deberán aparecer en una sola línea y deben ir marcados por un símbolo al inicio del item. Los simbolos permitidos son: -, + o *.
  • El parámetro noitemsep utiliza el paquete enumitem de LaTeX para quitar la separación por defecto de los items y para poner viñetas a los items.
  • unordered-list utiliza el entorno itemize de LaTeX.

El código LaTeX generado por md2tex es el siguiente:

\documentclass{article}

\usepackage{enumitem}

\begin{document}
    \begin{itemize}[<optional param 1>, <optional param 2>]
        \item <item>
        \item <item>
        \item <item>
        \item <item...>
    \end{itemize}
\end{document}

Ordered List

La sintaxis para las listas ordenadas es la siguiente:

[ordered-list; <optional param 1>; <optional param 2>] {
   1. <item 1> 
   2. <item 2> 
   3. <item 3> 
   n. <item n> 
}
  • El parámetro ordered-list es obligatorio y siempre deberá ser el primero, los parámetros opcionales pueden ser un tipo de numeración, según la numeración que se indique en los parámetros opcionales.
  • Cada elemento de la lista debe comenzar con un número arábigo (según se muestra en la sintaxis), seguido de un . o -; de lo contrario se generará un error al compilar con pdfLaTeX.
  • ordered-list utiliza el entorno enumerate de LaTeX.

El código LaTeX generado por md2tex es el siguiente:

\documentclass{article}

\usepackage{enumitem}

\begin{document}
    \begin{enumerate}[<optional param 1>, <optional param 2>]
        \item <item 1>
        \item <item 2>
        \item <item 3>
        \item <item n>
    \end{enumerate}
\end{document}

Nested List

La sintaxis para las listas anidadas es la siguiente:

[nested-list] {
1. <item 1>
    i. <item i>
        a. <item a>
            A. <item A>
                + <item>
                    - <item>
                    - <item>
                + <item>
            B. <item B>
        b. <item b>
    ii. <item ii>
2. <item 2>
}

Las listas anidadas tienen algunas limitaciones, estas se mencionan a continuación:

  • No soportan parámetros opcionales.
  • El primer item de la lista debe comenzar justo al inicio de la línea.
  • Cada subnivel de la lista deberá estar separado por una tabulación de cuatro caracteres.
  • No se soportan parráfos asociados a ningún item.
  • Por limitaciones de LaTeX, no se soportan listas de más de seis niveles.
  • Los primeros cuatro niveles de lista utilizan el entorno enumerate y los dos niveles restantes utilizan el entorno itemize.

El código LaTeX generado por md2tex es el siguiente:

\documentclass{article}

\begin{document}
    \begin{enumerate}
        \item <item 1>
        \begin{enumerate}
            \item <item i>
            \begin{enumerate}
                \item <item a>
                \begin{enumerate}
                    \item <item B>
                    \begin{itemize}
                        \item <item>
                        \begin{itemize}
                            \item <item>
                            \item <item>
                        \end{itemize}
                        \item <item>
                    \end{itemize}
                    \item <item B>
                \end{enumerate}
                \item <item b>
            \end{enumerate}
            \item <item ii>
        \end{enumerate}
        \item <item 2>
    \end{enumerate}
\end{document}

Description List

La sintaxis para las listas descriptivas es la siguiente:

[description-list; <optional param>] {
    <item title>. <item>
    <item title>. <item>
    <item title>. <item>
}
  • El primer parámetro deberá ser description-list y es obligatorio.
  • <item title> debe ir separado del <item> por . o -.
  • Solo soporta un parámetro opcional que puede ser noitemsep.
  • Utiliza el entorno description de LaTeX.

El código LaTeX generado por md2tex es el siguiente:

\documentclass{article}

\usepackage{enumitem}

\begin{document}
    \begin{description}[<optional param>]
        \item[<item title>] <item>
        \item[<item title>] <item>
        \item[<item title>] <item>
    \end{description}
\end{document}

Todo List

La sintaxis para las todo list “lista de quehaceres” es la siguiente:

[todo-list; <optional param>] {
    <item status> <item>
    <item status> <item>
    <item status> <item>
}
  • El primer parámetro deberá ser todo-list y es obligatorio.
  • Solo soporta un parámetro opcional que puede ser noitemsep.
  • \<item status\> puede ser el símbolo + para marcar con un check el item, el símbolo - para marcar con una x el item y el símbolo * para dejar desmarcado el item.

El código LaTeX generado es el siguiente:

\documentclass{article}

\usepackage{enumitem}
\usepackage{amssymb}
\usepackage{pifont}

\newlist{todolist}{itemize}{1}
\newcommand{\done}{\rlap{$\square$}{\large\hspace{1pt}\ding{51}}\hspace{-2.5pt}}
\newcommand{\undone}{\rlap{$\square$}{\large\hspace{1pt}\ding{55}}}

\begin{document}
    \begin{itemize}[label=]
        \item \begin{todolist}[label=$\square$]
            \item[<item status>] <item>
            \item[<item status>] <item>
            \item[<item status>] <item>
        \end{todolist}
    \end{itemize}
\end{document}

LaTeX hace uso de los paquetes amssymb y pifont para mostrar caracteres especiales en el archivo PDF que se generará con pdfLaTeX. El código generado crea un nuevo tipo de lista a partir del entorno itemize y crea dos nuevos comandos \doney \undone que son los que irán pasados como parámetro a <item status>, según el caracter que tenga <item status>.

Este tipo de lista está basado en una solución presentada por Joe Corneli en StackExchange.
https://tex.stackexchange.com/questions/247681/how-to-create-checkbox-todo-list

Demostración

Unordered List

En un archivo de texto (por ejemplo: unordered-list.md); escriba lo siguiente:

# Unordered List

## bullet: default
[unordered-list]{
    - item 1
    - item 2
    - item 3
}

## bullet: star 
[unordered-list; star]{
    + item 1
    + item 2
    + item 3
}

## bullet: diamond 
[unordered-list; diamond; noitemsep]{
    * item 1
    * item 2
    * item 3
}

Ejecute md2tex:

$ ./md2tex unordered-list.md

El código LaTeX generado es el siguiente:

\documentclass{article}

\usepackage{enumitem}

\begin{document}

	\section*{Unordered List}

	\subsection*{bullet: default}
	\begin{itemize}
		\item item 1
		\item item 2
		\item item 3
	\end{itemize}

	\subsection*{bullet: star}
	\begin{itemize}[label=$\star$]
		\item item 1
		\item item 2
		\item item 3
	\end{itemize}

	\subsection*{bullet: diamond}
	\begin{itemize}[label=$\diamond$,noitemsep]
		\item item 1
		\item item 2
		\item item 3
	\end{itemize}
\end{document}

Ejecute pdfLaTeX:

$ pdflatex unordered-list.tex

La salida en formato PDF será la siguiente:

Ordered List

En un archivo de texto (por ejemplo: ordered-list.md); escriba lo siguiente:

# Ordered List

## default
[ordered-list] {
    1. item 1
    2. item 2
    3. item 3
}

## numeration: alph
[ordered-list; alph] {
    1. item 1
    2. item 2
    3. item 3
}

## numeration: Roman
[ordered-list; noitemsep; Roman] {
    1- item 1
    2- item 2
    3- item 3
}

Ejecute md2tex:

$ ./md2tex ordered-list.md

El código LaTeX generado es el siguiente:

\documentclass{article}

\usepackage{enumitem}

\begin{document}

	\section*{Ordered List}

	\subsection*{default}
	\begin{enumerate} 
		\item item 1
		\item item 2
		\item item 3
	\end{enumerate}

	\subsection*{numeration: alph}
	\begin{enumerate} [label=\alph*.]
		\item item 1
		\item item 2
		\item item 3
	\end{enumerate}

	\subsection*{numeration: Roman}
	\begin{enumerate} [noitemsep,label=\Roman*.]
		\item item 1
		\item item 2
		\item item 3
	\end{enumerate}
\end{document}

Ejecute pdfLaTeX:

$ pdflatex ordered-list.tex

El archivo PDF generado es el siguiente:

Nested List

En un archivo de texto (por ejemplo: nested-list.md); escriba lo siguiente:

# Nested List

[nested-list] {
1. Level 1
    a. Level 2
        i. Level 3
            A. Level 4
                + Level 5
                    * Level 6
                    * Level 6
                + Level 5
            B. Level 4
2. Level 1
}

Ejecute md2tex:

$ ./md2tex nested-list.md

El código LaTeX generado es el siguiente:

\documentclass{article}

\begin{document}

	\section*{Nested List}
	\begin{enumerate}
		\item Level 1
		\begin{enumerate}
			\item Level 2
			\begin{enumerate}
				\item Level 3
				\begin{enumerate}
					\item Level 4
					\begin{itemize}
						\item Level 5
						\begin{itemize}
							\item Level 6
							\item Level 6
						\end{itemize}
						\item Level 5
					\end{itemize}
					\item Level 4
				\end{enumerate}
			\end{enumerate}
		\end{enumerate}
		\item Level 1
	\end{enumerate}
\end{document}

Ahora, ejecute pdfLaTeX:

$ pdflatex nested-list.tex

El archivo PDF generado es el siguiente:

Description List

En un archivo de texto (por ejemplo: description-list.md); escriba lo siguiente:

# Description List

## default
[description-list] {
    First. Item 1
    Second. Item 2
    Third. Item 3
}

## _description list_ param: noitemsep
[description-list; noitemsep] {
    One- Item 1
    Two- Item 2
    Three- Item 3
}

Ejecute md2tex:

$ ./md2tex description-list.md

El código LaTeX generado es el siguiente:

\documentclass{article}

\usepackage{enumitem}

\begin{document}

	\section*{Description List}

	\subsection*{default}
	\begin{description}
		\item[First]  Item 1
		\item[Second]  Item 2
		\item[Third]  Item 3
	\end{description}

	\subsection*{\textit{description list} param: noitemsep}
	\begin{description}[noitemsep]
		\item[One]  Item 1
		\item[Two]  Item 2
		\item[Three]  Item 3
	\end{description}
\end{document}

Ejecute pdfLaTeX en la carpeta latex/tex/:

$ pdflatex description-list.tex

El archivo PDF generado será similar al siguiente:

Todo List

En un archivo de texto (por ejemplo: todo-list.md); escriba lo siguiente:

# Todo List

## default
[todo-list] {
    - item 1
    + item 2
    * item 3
    + item 4
    - item 5
}

Ejecute md2tex:

$ ./md2tex todo-list.md

El código LaTeX generado es el siguiente:

\documentclass{article}

\usepackage{enumitem}
\usepackage{amssymb}
\usepackage{pifont}

%% todolist --> variant of: Joe Corneli
%% https://tex.stackexchange.com/questions/247681/how-to-create-checkbox-todo-list
\newlist{todolist}{itemize}{1}
\newcommand{\done}{\rlap{$\square$}{\large\hspace{1pt}\ding{51}}\hspace{-2.5pt}}
\newcommand{\undone}{\rlap{$\square$}{\large\hspace{1pt}\ding{55}}}

\begin{document}

	\section*{ToDo List}

	\subsection*{default}
	\begin{itemize}[label=]
		\item \begin{todolist}[label=$\square$]
			\item[\undone] item 1
			\item[\done] item 2
			\item item 3
			\item[\done] item 4
			\item[\undone] item 5
		\end{todolist}
	\end{itemize}
\end{document}

Ejecute pdfLaTeX en la carpeta latex/tex/:

$ pdflatex todo-list.tex

El archivo PDF generado será similar al siguiente:

Editado: 18 Mar 2021 | Autor: Luis E. Fajardo