
Ich arbeite an einem Projekt, bei dem ich eine Tabelle mehrmals in einem Dokument kopieren muss. Die Grundstruktur der Tabelle ist dieselbe, einige Eingaben müssen jedoch geändert werden. Ich habe mich gefragt, ob es möglich ist, ein grundlegendes Layout (oder eine Art Vorlage) zu definieren, in das ich nur die variablen Daten eingeben und nicht die gesamte Tabelle erneut einrichten muss.
Mein Problem besteht darin, dass die Wahrscheinlichkeit menschlicher Fehler groß ist, wenn ich Tabellen kopiere und einfüge, um sie später zu ändern.
Schauen wir uns ein Beispiel an, was ich möchte. Hier ist zunächst eine Tabellendefinition:
\begin{table}[h]
\makebox[\linewidth]
{
\begin{tabular}{|l|l|l|}
\hline
[static] & [static] & [static] \\ \hline
[static] & [DYNAMIC] & [DYNAMIC] \\ \hline
[static] & [DYNAMIC] & [DYNAMIC] \\ \hline
[static] & [DYNAMIC] & [DYNAMIC] \\ \hline
\end{tabular}
}
\caption{[DYNAMIC}
\label{[DYNAMIC]}
\end{table}
Ich suche nach einer Möglichkeit, die Tabelle zu replizieren, wobei die mit [static] markierten Elemente nicht geändert werden sollen, wenn ich die Tabelle repliziere, die mit [DYNAMIC] markierten Elemente jedoch in jeder Tabelle geändert werden sollen. Ich suche also nach einer Möglichkeit, das Basislayout zu definieren, sodass die zu ändernden Daten einfach „eingefügt“ werden können.
Ich habe bei Google erfolglos danach gesucht und frage mich nun, ob dies mit Latex überhaupt möglich ist und wenn ja, wie man dies richtig macht.
Danke :)
Antwort1
Sie können beispielsweise ein Schlüssel-Wert-System verwenden expl3
.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\archietable}{m}
{
\begin{table}[htp]
\centering
\keys_set:nn { archie/table } { #1 }
\begin{tabular}{|l|l|l|}
\hline
STATIC & STATIC & STATIC \\ \hline
STATIC & \l_archie_table_XA_tl & \l_archie_table_YA_tl \\ \hline
STATIC & \l_archie_table_XB_tl & \l_archie_table_YB_tl \\ \hline
STATIC & \l_archie_table_XC_tl & \l_archie_table_YC_tl \\ \hline
STATIC & \l_archie_table_XD_tl & \l_archie_table_YD_tl \\ \hline
\end{tabular}
\caption{\l_archie_table_caption_tl}
\label{\l_archie_table_label_tl}
\end{table}
}
\keys_define:nn { archie/table }
{
XA .tl_set:N = \l_archie_table_XA_tl,
XB .tl_set:N = \l_archie_table_XB_tl,
XC .tl_set:N = \l_archie_table_XC_tl,
XD .tl_set:N = \l_archie_table_XD_tl,
YA .tl_set:N = \l_archie_table_YA_tl,
YB .tl_set:N = \l_archie_table_YB_tl,
YC .tl_set:N = \l_archie_table_YC_tl,
YD .tl_set:N = \l_archie_table_YD_tl,
caption .tl_set:N = \l_archie_table_caption_tl,
label .tl_set:N = \l_archie_table_label_tl,
}
\ExplSyntaxOff
\begin{document}
\archietable{
XA = foo,
XB = bar,
XC = baz,
XD = foobar,
YA = gnu,
YB = gnat,
YC = gnocco,
YD = whatever,
caption=First caption,
label=flabel,
}
\archietable{
XA = 1,
XB = 2,
XC = 3,
XD = 4,
YA = 5,
YB = 6,
YC = 7,
YD = 8,
caption=Second caption,
label=slabel,
}
\end{document}
Ändern Sie die STATIC
Werte. Denken Sie daran, dass Leerzeichen im Text in der Definition von \archietable
als eingefügt werden sollten ~
.
Die Reihenfolge, in der Sie die Schlüssel angeben, ist unerheblich.