Eigene Kommandos innerhalb einer Tabelle

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


ph0llux
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Fr 17. Mai 2019, 10:28

Eigene Kommandos innerhalb einer Tabelle

Beitrag von ph0llux »

Moin,

ich erstelle gerade ein "Formular" in Latex, bei welchem nur einige Sachen eingefügt und einige Checkboxen ausgefüllt werden müssen.
Zu diesem Zweck habe ich die Checkboxen mit dem Kommando "\MyOwnCheckBox" definiert. Dem übergebe ich dann die Werte, welche in die CheckBox-Kommandos eingetragen werden ("\checkboxI" und "\checkboxII"). Hierbei wird eine 0 für eine "nicht ausgefüllte Checkbox" und eine 1 für eine "ausgefüllte Checkbox" im Hauptdokument angegeben.
Wenn in \checkboxI oder \checkboxII eine Null steht, klappt das auch wunderbar.
Allerdings: Sobald ich es auf 1 setze, verschiebt sich aus irgendeinem Grund die Tabelle im Minimalbeispiel, so dass das Dokument nicht mehr generiert wird. Das sieht man besonders gut, wenn man

Code: Alles auswählen

\begin{tabular}{|p{5.75cm}|p{10.25cm}}
durch

Code: Alles auswählen

\begin{tabular}{|p{5.75cm}|p{10.25cm}|l}
ersetzt.

Warum ist das so? Die Fehlermeldung, die mir mein Editor Gummi ausgibt, lautet: "Extra alignment tab has been changed to \cr.".

Code: Alles auswählen

\documentclass[a4paper, fontsize12pt, headsepline=on, footsepline=on]{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage[utf8]{inputenc}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage[ngerman]{babel}
\usepackage{ifthen}
\usepackage{multirow}
\usepackage{wasysym}


\newcommand{\checkboxI}{0}
\newcommand{\checkboxII}{0}

\newcommand{\MyOwnCheckBox}[2]{

	\ifthenelse{ \equal{#1}{0}}{
		\Square \ #2
	}
	
	\ifthenelse{ \equal{#1}{1}}{
		\CheckedBox \ #2
	}
}

\newcommand{\tabellengeruest}{
		\raggedright
		\renewcommand{\arraystretch}{1.1}
		\begin{tabular}{|p{5.75cm}|p{10.25cm}}
		\hline
		1 & Irgendwas\\
		\hline
		\multirow{4}{*}{Mutlirow}
		& Text 1\\
		& Text 2\\
		& \MyOwnCheckBox{\checkboxI}{CheckboxI Text}\\
		& \MyOwnCheckBox{\checkboxII}{CheckboxII Text}\\
		\hline
		2 & Irgendwas weiteres\\
		\hline
		\end{tabular}
		\renewcommand{\arraystretch}{1}
}

\newcommand{\generiereTabelle}{
	\tabellengeruest
}


\begin{document}
\renewcommand{\checkboxI}{0}
\renewcommand{\checkboxII}{0}
\generiereTabelle
\end{document}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2200
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Der Befehl \ifthenelse erwartet noch ein drittes Argument für den Fall, wenn die Bedingung nicht zutrifft.

Ebenso der Befehl des alternativen Pakets in meinem Vorschlag:

Code: Alles auswählen

\documentclass[fontsize=12pt, headsepline, footsepline]{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[margin=2cm]{geometry}
\usepackage[ngerman]{babel}
\usepackage{etoolbox}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{wasysym}


\newcommand{\checkboxI}{0}
\newcommand{\checkboxII}{0}

\newcommand{\MyOwnCheckBox}[2]{
   \ifnumequal{#1}{0}{
      \Square \ #2
   }{}
   \ifnumequal{#1}{1}{
      \CheckedBox \ #2
   }{}
}

\newcommand{\tabellengeruest}{
   {\renewcommand{\arraystretch}{1.1}
   \begin{tabularx}{\textwidth}{|p{5.75cm}|X|}
   \hline
   1 & Irgendwas\\
   \hline
   \multirow{4}{*}{Multirow}
   & Text 1\\
   & Text 2\\
   & \MyOwnCheckBox{\checkboxI}{CheckboxI Text}\\
   & \MyOwnCheckBox{\checkboxII}{CheckboxII Text}\\
   \hline
   2 & Irgendwas weiteres\\
   \hline
   \end{tabularx}}
}

\newcommand{\generiereTabelle}{
   \tabellengeruest
}


\begin{document}
\renewcommand{\checkboxI}{1}
\renewcommand{\checkboxII}{1}
\generiereTabelle
\end{document}
Eine weitere Möglichkeit:

Code: Alles auswählen

\documentclass[fontsize=12pt, headsepline, footsepline]{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[margin=2cm]{geometry}
\usepackage[ngerman]{babel}
\usepackage{etoolbox}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{wasysym}

\newtoggle{checkboxI}
\newtoggle{checkboxII}

\newcommand{\MyOwnCheckBox}[2]{
   \iftoggle{#1}{
      \CheckedBox \ #2
   }{
      \Square \ #2
   }
}

\newcommand{\tabellengeruest}{
   {\renewcommand{\arraystretch}{1.1}
   \begin{tabularx}{\textwidth}{|p{5.75cm}|X|}
   \hline
   1 & Irgendwas\\
   \hline
   \multirow{4}{*}{Multirow}
   & Text 1\\
   & Text 2\\
   & \MyOwnCheckBox{checkboxI}{CheckboxI Text}\\
   & \MyOwnCheckBox{checkboxII}{CheckboxII Text}\\
   \hline
   2 & Irgendwas weiteres\\
   \hline
   \end{tabularx}}
}

\newcommand{\generiereTabelle}{
   \tabellengeruest
}


\begin{document}
\toggletrue{checkboxI}
\toggletrue{checkboxII}
\generiereTabelle
\end{document}

ph0llux
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Fr 17. Mai 2019, 10:28

Beitrag von ph0llux »

ah perfekt, danke! Das war die Lösung. :D

Antworten