30 Ene 2021

Tablas

Contenido


Para manipular tablas en md2tex se hace uso de una sintaxis diferente, dedicada a cumplir con los requisitos mínimos que LaTeX necesita para generar tablas.

En md2tex hay dos maneras de generar tablas: por defecto y con el paquete pgfplotstable. Además se necesitan otros paquetes adicionales para la presentación de algunos estilos de tablas.

Los paquetes que LaTeX utiliza para presentar tablas son los siguientes:

  • booktabs: Sirve para poner líneas especiales en la tabla. Los comandos: \toprule, \midrule y \bottomrule hacen uso de este paquete.
  • colortbl: Este paquete sirve para poner colores a filas, columnas e incluso celdas de una tabla. En el código generado por md2tex se implementa el comando \rowcolor.
  • pgfplotstable: Se hace uso de este paquete para leer un archivo CSV (comma-separeted values), el compilador pdfLaTeX hará uso de este paquete para cargar los datos del archivo CSV y mostrar esos datos en el archivo PDF generado.
  • siunitx: Este paquete sirve para hacer redondeo de cifras decimales y alinear las cifras enteras y decimales. Hace uso del comando \sisetup; md2tex hace un redondeo a dos cifras y no existen parámetros que modifiquen los valores del comando \sisetup.
  • xcolor: Se utiliza este paquete para dar soporte de colores ya sea para la fuente o para el fondo de la fuente de un texto específico. md2tex lo utiliza para darle un color de fondo a las filas de una tabla. Los colores soportados por este paquete son los siguientes:
    Colores soportados por el paquete xcolor
    black blackblue bluebrown brownbrown cyanbrown darkgraybrown graybrown greenbrown lightgraybrown limebrown magentabrown olivebrown orangebrown pinkbrown purplebrown redbrown tealbrown violetbrown whitebrown yellow

md2tex puede generar código para tablas, utilizando lo siguiente:

  • Utilizando el entorno tabular.
  • Utilizando el comando pgfplotstabletypeset.

Tanto el entorno tabular, como el comando pgfplotstabletypeset necesitan estar declarados dentro del entorno table.

Sintaxis para la generación de tablas

Debido a que md2tex puede generar tablas de dos maneras, habrán algunos cambios en la sintaxis para la generación de tablas.

Antes de continuar, vale mencionar primeramente en que consiste el método de separación de valores por comas (CSV).
Es un formato no estandarizado y la idea principal es separar conjuntos de datos con comas para las columnas (o punto y coma cuando la coma no pueda ser utilizada) y saltos de línea para separar las filas; esta idea se complica un poco cuando los campos del conjunto de datos contienen comas o saltos de línea. Para eso se deberán encerrar los valores del campo entre comillas "".

Generación de tablas utilizando el entorno tabular

La generación de tablas con el entorno tablular en md2tex tendrá una sintaxis parecida a la de Markdown pero con algunas ligeras variantes. La sintaxis es la siguiente:

![<caption>; <optional param>] {
    <title>  | <title>  | <title>
    <align>  | <align>  | <align>
    <value>  | <value>  | <value>
    <value>  | <value>  | <value>
    <.....>  | <.....>  | <.....>
}

El código generado por md2tex tendrá la siguiente sintaxis:

\begin{table}[!h]
    \centering
    \begin{tabular}{|<align>|<align>|<align>|} \hline
        \textbf{<title>} & \textbf{<title>} & \textbf{<title>} \\ \hline
        <value> & <value> & <value> \\ \hline
        <value> & <value> & <value> \\ \hline
        <.....> & <.....> & <.....> \\ \hline
    \end{tabular}
    \caption{<caption>}
\end{table}

Al igual que en las Figuras, el parametro <caption> es obligatorio y siempre irá de primero. El segundo parámetro es opcional y deberá ír separado por ;, de lo contrario formará parte del parametro <caption>. En el contenido de la tabla todo será manejado al estilo Markdown, aunque las opciones de alineamiento tendrán una variante. En la siguiente tabla se muestran las opciones de alineamiento:

Sintaxis Descripción
------- Por defecto, md2tex alineará el texto a la izquierda.
:------ Alineación del texto a la izquierda.
:-----: Alineación del texto centrada.
------: Alineación del texto a la derecha.
<-----> (opcional) Se puede utilizar cuando la columna tiene valores decimales, alineará
los puntos decimales de los valores y le dará una precisión de dos
decimales después del punto.

<optional param> se utilizará para dar estilos a las tablas. Esto se desarrollará mas adelante.

Generación de tablas utilizando el comando pgfplotstabletypeset

El comando pgfplotstabletypeset utiliza el paquete pgfplotstable para generar tablas a partir de un archivo CSV. md2tex buscará el archivo CSV en la carpeta csv, por lo tanto, esa carpeta deberá estar creada en el directorio raíz del proyecto y dentro de esa carpeta deberá estar el archivo (o los archivos) CSV que necesita mostrar.

El árbol de directorios debe ser similar al siguiente:

your-project/
    ├── md2tex
    ├── test.md
    └── latex/
        ├── images/
        ├── csv/
        |    └── your-table.csv    
        └── tex/

La sintaxis que md2tex utiliza para la generación de tablas a partir de un archivo CSV es la siguiente:

![<caption>; <style param | csv param>; <optional param>] {
    <csv path>
}

El código generado tendrá la siguiente sintaxis:

\begin{table}[h!]
    \centering
    \pgfplotstabletypeset[
        col sep=comma,
        string type,
        assign column name/.style={/pgfplots/table/column name={\textbf{#1}}},
        every head row/.style={before row=\hline},
        every last row/.style={after row=\hline},
        every even row/.style={before row=\hline, after row=\hline},
        every last column/.style={column type/.add={}{|}},
        every even column/.style={column type/.add={|}{|}}
    ]{<csv path>}
    \caption{<caption>}
\end{table}

Si el segundo parámetro es un parámetro de estilo; entonces, el tercer parámetro deberá ser csv. Si no se indica el tercer parámetro, md2tex generará código erroneo :warning:. Si no se desea aplicar un estilo a la tabla, entonces el segundo parámetro deberá ser csv.

El parámetro csv es obligatorio, ya sea como segundo o tercer parámetro. De lo contrario, se generará código erroneo.

Estilos de tablas

md2tex ha implementado 3 estilos para las tablas: default, style1 y style2; el estilo por defecto no es necesario indicarlo en los parámetros. En el caso de style1 y style2 también pueden involucrar un color; la sintaxis para indicar un color al estilo es la siguiente: <style>-<color>. Donde <style> puede ser: style1 o style2 y <color> soporta los 19 colores que se han indicado en la tabla Colores soportados por el paquete xcolor al inicio de este apartado.

Los colores que se utilizaran tienen una opacidad de 70% y 90%, dependiendo del estilo de tabla que se utilice.

Los estilos de tablas son similares a los que se muestran en la siguiente figura: tables

Demostración

Tablas utilizando el entorno tabular

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

# Generaci'on de tablas con el entorno tabular

![Tabla 1]{
    column 1|column 2 |column 3
    :-------|:--------|:------:
    abc     | def     | ghi    
    123     | 456     | 789    
    987     | 654     | 321    
    9.87    | 6.54    | 3.21    
    68.7    | 65.4    | 32.1    
    jkl     | mno     | pqr
            | xyz     | abc    
}

![Tabla con unidades alineadas.;style1-green]{
    Value 1 |Value 2  |Value 3| Value 4
    :-------|<------->|------:|:-------:
    1       | 1110.10 | a     | 0.1
    2       | 10.10   | b     | 0.01
    3       | 23.11   | c     | 0.001
    4       | 233.18  | d     | 0.0001
    5       | 963.36  | e     | 0.00001
    6       | 113.36  | f     | 0.000001
}

![Tabla con unidades alineadas en dos columnas.;style1]{
    Value 1 |Value 2  |Value 3
    :-------|<------->|<------>
    1       | 1110.10 | 0.00001
    2       | 10.10   | 0.9090
    3       | 23.11   | 0.8900
}

---

![Tabla con unidades alineadas en dos columnas.; style2-olive]{
    Value 1 |Value 2  |Value 3
    :-------|<------->|<------>
    1       | 1110.10 | 0.00001
    2       | 10.10   | 0.9090
    3       | 23.11   | 0.8900
}

Ejecute md2tex:

$ ./md2tex tables.md

El código generado para el archivo anterior será el siguiente:

\documentclass{article}

\usepackage{siunitx}
\usepackage{booktabs}
\usepackage{xcolor}
\usepackage{colortbl}

\sisetup{
	round-mode = places,
	round-precision = 2
}

\begin{document}

	\section*{Generaci\'on de tablas con el entorno tabular}

	\begin{table}[h!]
		\centering
		\begin{tabular}{|l|l|c|} \hline
			\textbf{    column 1} & \textbf{column 2 } & \textbf{column 3} \\ \hline
			    abc     & def     & ghi     \\ \hline
			    123     & 456     & 789     \\ \hline
			    987     & 654     & 321     \\ \hline
			    9.87    & 6.54    & 3.21     \\ \hline
			    68.7    & 65.4    & 32.1     \\ \hline
			    jkl     & mno     & pqr \\ \hline
			            & xyz     & abc     \\ \hline
		\end{tabular}
		\caption{Tabla 1}
	\end{table}

	\begin{table}[h!]
		\centering
		\begin{tabular}{lSrc} 
			\toprule
			\textbf{    Value 1 } & \textbf{Value 2  } & \textbf{Value 3} & \textbf{ Value 4} \\ \midrule \rowcolor{green!10}
			    1       & 1110.10 & a     & 0.1 \\ \rowcolor{green!30}
			    2       & 10.10   & b     & 0.01 \\ \rowcolor{green!10}
			    3       & 23.11   & c     & 0.001 \\ \rowcolor{green!30}
			    4       & 233.18  & d     & 0.0001 \\ \rowcolor{green!10}
			    5       & 963.36  & e     & 0.00001 \\ \rowcolor{green!30}
			    6       & 113.36  & f     & 0.000001 \\ 
			\bottomrule
		\end{tabular}
		\caption{Tabla con unidades alineadas.}
	\end{table}

	\begin{table}[h!]
		\centering
		\begin{tabular}{lSS} 
			\toprule
			\textbf{    Value 1 } & \textbf{Value 2  } & \textbf{Value 3} \\ \midrule
			    1       & 1110.10 & 0.00001 \\ 
			    2       & 10.10   & 0.9090 \\ 
			    3       & 23.11   & 0.8900 \\ 
			\bottomrule
		\end{tabular}
		\caption{Tabla con unidades alineadas en dos columnas.}
	\end{table}
	\newpage

	\begin{table}[h!]
		\centering
		\begin{tabular}{lSS} 
			\toprule \rowcolor{olive!30}
			\textbf{    Value 1 } & \textbf{Value 2  } & \textbf{Value 3} \\ \midrule 
			    1       & 1110.10 & 0.00001 \\ 
			    2       & 10.10   & 0.9090 \\ \midrule \rowcolor{olive!10}
			    3       & 23.11   & 0.8900 \\ 
			\bottomrule
		\end{tabular}
		\caption{Tabla con unidades alineadas en dos columnas.}
	\end{table}
\end{document}

Ahora, ejecute pdfLaTeX:

$ pdflatex tables.tex

La salida PDF será la siguiente:

Tablas utilizando el paquete pgfplotstable

Para esta demostración necesitará tener algunos archivos en formato CSV guardados en la ruta: /latex/csv/. Puede optar por editar sus archivos CSV en un editor de textos o con Libre Office Calc.

Ejemplo de edición de archivos CSV: csv

Asumiendo que ya tiene los archivos CSV en la ruta /latex/csv/, en un nuevo archivo de texto (puede llamarlo tables_csv.md) escriba lo siguiente:

# Generaci'on de tablas con el paquete pgfplotstable

![Valores de Tabla 1.;csv]{
        ../csv/table1.csv
}

![Valores de Tabla 2.;style1;csv]{
        ../csv/table2.csv
}

![Valores de Tabla 3.;style1-blue; csv]{
        ../csv/table1.csv
}

![Valores de Tabla 4.;style2; csv]{
        ../csv/table3.csv
}

---

![Valores de Tabla 5.;style2-green; csv]{
        ../csv/table3.csv
}

Ejecute md2tex:

$ ./md2tex tables_csv.md

El código generado por md2tex se presenta a continuación:

\documentclass{article}

\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{xcolor}
\usepackage{colortbl}

\begin{document}

	\section*{Generaci\'on de tablas con el paquete pgfplotstable}

	\begin{table}[h!]
		\centering
		\pgfplotstabletypeset[
			col sep=comma,
			string type,
			assign column name/.style={/pgfplots/table/column name={\textbf{#1}}},
			every head row/.style={before row=\hline},
			every last row/.style={after row=\hline},
			every even row/.style={before row=\hline, after row=\hline},
			every last column/.style={column type/.add={}{|}},
			every even column/.style={column type/.add={|}{|}}
		]{../csv/table1.csv}
		\caption{Valores de Tabla 1.}
	\end{table}

	\begin{table}[h!]
		\centering
		\pgfplotstabletypeset[
			col sep=comma,
			string type,
			assign column name/.style={/pgfplots/table/column name={\textbf{#1}}},
			every head row/.style={before row=\toprule, after row=\midrule},
			every last row/.style={after row=\midrule},
		]{../csv/table2.csv}
		\caption{Valores de Tabla 2.}
	\end{table}

	\begin{table}[h!]
		\centering
		\pgfplotstabletypeset[
			col sep=comma,
			string type,
			every head row/.style={before row=\toprule, after row=\midrule},
			assign column name/.style={/pgfplots/table/column name={\textbf{#1}}},
			every even row/.style={after row ={\rowcolor{blue!30}}, before row={\rowcolor{blue!10}}},
			every last row/.style={after row=\midrule},
		]{../csv/table1.csv}
		\caption{Valores de Tabla 3.}
	\end{table}

	\begin{table}[h!]
		\centering
		\pgfplotstabletypeset[
			col sep=comma,
			string type,
			every head row/.style={before row=\toprule, after row=\midrule},
			assign column name/.style={/pgfplots/table/column name={\textbf{#1}}},
			every last row/.style={before row=\midrule, after row=\bottomrule},
		]{../csv/table3.csv}
		\caption{Valores de Tabla 4.}
	\end{table}
	\newpage

	\begin{table}[h!]
		\centering
		\pgfplotstabletypeset[
			col sep=comma,
			string type,
			every head row/.style={before row=\rowcolor{green!30} \toprule, after row=\midrule},
			assign column name/.style={/pgfplots/table/column name={\textbf{#1}}},
			every last row/.style={before row=\rowcolor{green!10} \midrule, after row=\bottomrule},
		]{../csv/table3.csv}
		\caption{Valores de Tabla 5.}
	\end{table}
\end{document}

Luego ejecute pdfLaTeX:

$ pdflatex tables_csv.tex

El resultado en PDF será el siguiente:

El comando \pgfplotstabletypeset solo funciona para tablas con tamaño menor a una página. En caso de tener una tabla de mayor extensión, se recomienda dividir la tabla en páginas separadas.

Editado: 31 Ene 2021 | Autor: Luis E. Fajardo