Soy relativamente nuevo en la definición de comandos y entornos. Estoy intentando crear varias tablas (todas siguiendo una plantilla) y pensé que definir yo mismo un nuevo comando simplificaría el código. Esto es lo que probé:
\newcommand{test}[6]{
\begin{table}
\begin{tabular}{ll}
\centering
\toprule
\textbf{Form} & \textbf{Conjugation} \\
\midrule
\textit{Yo} & \textit{#1} \\
\textit{T\'u} & \textit{#2} \\
\textit{\'El} & \textit{#3} \\
\textit{Nosot@s} & \textit{#4} \\
\textit{Vosotr@s} & \textit{#5} \\
\textit{Ell@s} & \textit{#6} \\
\bottomrule
\end{tabular}
\end{table}
}
Básicamente, me gustaría poder ingresar 6 parámetros, que los complete e imprima la tabla correspondiente.
Desafortunadamente, este código no funciona. ¿Sabes cómo hacerlo funcionar?
¡Gracias!
Respuesta1
Aquí hay una macro más flexible, que permite elegir entre usar table
(cuando la clave caption
se usa en el argumento opcional) o simplemente producir el archivo tabular
.
La placement
clave (valor predeterminado htp
) se puede agregar junto con las otras opciones.
\documentclass{article}
\usepackage{booktabs}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\conjugation}{O{}m}
{
\group_begin:
\keys_set:nn { froggos/conjugation } { #1 }
\froggos_conjugation:n { #2 }
\group_end:
}
\keys_define:nn { froggos/conjugation }
{
placement .tl_set:N = \l__froggos_conjugation_placement_tl,
placement .initial:n = htp,
caption .tl_set:N = \l__froggos_conjugation_caption_tl,
shortcaption .tl_set:N = \l__froggos_conjugation_shortcaption_tl,
label .tl_set:N = \l__froggos_conjugation_label_tl,
}
\seq_new:N \l__froggos_conjugation_entries_seq
\cs_new_protected:Nn \froggos_conjugation:n
{
\tl_if_empty:NF \l__froggos_conjugation_caption_tl
{
\__froggos_conjugation_table_begin:V \l__froggos_conjugation_placement_tl
\centering
}
\seq_set_split:Nnn \l__froggos_conjugation_entries_seq { \\ } { #1 }
\begin{tabular}{ll}
\toprule
\textbf{Form} & \textbf{Conjugation} \\
\midrule
\textit{Yo} & \textit{\seq_item:Nn \l__froggos_conjugation_entries_seq {1}} \\
\textit{T\'u} & \textit{\seq_item:Nn \l__froggos_conjugation_entries_seq {2}} \\
\textit{\'El} & \textit{\seq_item:Nn \l__froggos_conjugation_entries_seq {3}} \\
\textit{Nosotr@s} & \textit{\seq_item:Nn \l__froggos_conjugation_entries_seq {4}} \\
\textit{Vosotr@s} & \textit{\seq_item:Nn \l__froggos_conjugation_entries_seq {5}} \\
\textit{Ell@s} & \textit{\seq_item:Nn \l__froggos_conjugation_entries_seq {6}} \\
\bottomrule
\end{tabular}
\tl_if_empty:NF \l__froggos_conjugation_caption_tl
{
\tl_if_empty:NTF \l__froggos_conjugation_shortcaption_tl
{
\caption{\l__froggos_conjugation_caption_tl}
}
{
\caption[\l__froggos_conjugation_shortcaption_tl]{\l__froggos_conjugation_caption_tl}
}
\tl_if_empty:NF \l__froggos_conjugation_label_tl
{
\label{\l__froggos_conjugation_label_tl}
}
\end{table}
}
}
\cs_new_protected:Nn \__froggos_conjugation_table_begin:n
{
\begin{table}[#1]
}
\cs_generate_variant:Nn \__froggos_conjugation_table_begin:n {V}
\ExplSyntaxOff
\begin{document}
\listoftables
\section{Main}
\conjugation{soy \\ eres \\ es \\ somos \\ sois \\ son}
\conjugation[
caption=Conjugation of \textit{ser},
label=verb:ser,
]{soy \\ eres \\ es \\ somos \\ sois \\ son}
\conjugation[
caption={Conjugation of \textit{ser}, but with a very long caption that requires a short one},
shortcaption=Conjugation of \textit{ser},
label=verb:ser-again,
]{soy \\ eres \\ es \\ somos \\ sois \\ son}
\end{document}