Tabelle in Abhängigkeit von Argumenten erstellen, IFTHENELSE

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


ChristophH

Tabelle in Abhängigkeit von Argumenten erstellen, IFTHENELSE

Beitrag von ChristophH »

Hallo zusammen!

Nachdem ich mit meiner Recherche nicht mehr weiterkomme, wende ich mich nun mit meinem Problem direkt an euch.

Die Situation ist die Folgende:

ich habe den Befehl \skillGroup definiert, welchem bis zu neun Argumente übergeben werden. Davon abhängig wird eine ein- bis vierzeilige Tabelle erstellt.
Ist ein Argumentepaar nicht gegeben, soll für dieses keine neue Zeile eingefügt werden. Daher die Abfrage mit \ifthenelse.
Soweit funktioniert das Ganze auch. Wenn ich jedoch nur drei Argumente verwende (siehe nachfolgendes Beispiel), werden die Abstände nach der Tabelle größer als bei mehrzeiligen Tabellen.
Ich vermute Latex sieht das als Absatz an und fügt zusätzlichen Raum hinzu.

Versuche mit negativen \vspace funktionieren zwar, sind aber keine wirkliche Lösung sondern ein schlechter Vertuschungsversuch.

Daher meine Frage an euch Profis:
Welche Möglichkeit einer Anpassung gibt es um den beschriebenen Abstand für jede Tabelle (unabhängig von der Zeilenanzahl) gleich zu halten?

Für Eure Hilfe bin ich mehr als dankbar! :)

Grüße
Christoph


MINIMALBEISPIEL:
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[left=2.50cm, right=2.50cm, top=2.50cm, bottom=2.50cm]{geometry}
\usepackage{array}
\usepackage{ifthen}
\usepackage{blindtext}




%Befehl zur Erstellung einer Tabelle anhand der übergebenen Argumente
\newcommand{\skillGroup}[9]{
	\noindent
	\begin{tabular*}{\textwidth}{@{}p{6cm}|ll}
		%		Tabelle, wenn alle Argumente gegeben sind
		%		\bfseries #1 & #2 & #3 \\
		%					& #4 & #5 \\
		%					& #6 & #7 \\
		%					& #8 & #9 \\
		%
		%
		\bfseries #1 & #2 & #3%
		%Prüfung der Argumente: wenn ein Argumentepaar (z.B. #4 und #5) leer/nicht %gegeben sind, wird für diese keine Zeile ausgegeben. Die Tabelle wird %entsprechend kürzer.
		%Sind nur 3 Argumente gegeben (=einzeilige Tabelle), kommt es zu einem %größeren Abstand nach der Tabelle, als wenn die Tabelle mehrzeilig %ist.
		%Eine unschöne Lösung ist das Hinpfuschen mit einem negativen \vspace
		%
		%Bewusste verwendung des Strings "leer", da meines Wissens \equal nur für %String-Vergleiche geeignet ist.
		\ifthenelse{\equal{#4}{leer}}{}{\\ & #4 & #5 } %unschöne Lösung: \vspace{-5mm} im Then-Zweig
		\ifthenelse{\equal{#6}{leer}}{}{\\ & #6 & #7 } 
		\ifthenelse{\equal{#8}{leer}}{}{\\ & #8 & #9 } 	
	\end{tabular*}
}




\begin{document}
	
	\noindent
	\blindtext
	
	\skillGroup{Software}{\LaTeX}{anscheinend nicht so gut}{arg4}{arg5}{arg6}{arg7}{arg8}{arg9}
	
	\noindent
	\blindtext
	
	\skillGroup{Versionsverwaltungssoftware}
	{Git}{Anfänger}
	{leer}{leer}
	{leer}{leer}
	{leer}{leer}
	
	\noindent
	\blindtext
	
	\skillGroup{Software}{\LaTeX}{anscheinend nicht so gut}{arg4}{arg5}{arg6}{arg7}{leer}{leer}
	
	\noindent
	\blindtext
	
	
\end{document}

Gast

Beitrag von Gast »

Typischer Fall von unerwünschten Leerzeichen durch nicht auskommentierte Zeilenenden.
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[left=2.50cm, right=2.50cm, top=2.50cm, bottom=2.50cm]{geometry}
\usepackage{array}
\usepackage{ifthen}
\usepackage{blindtext}

%Befehl zur Erstellung einer Tabelle anhand der übergebenen Argumente
\newcommand{\skillGroup}[9]{%
   \noindent
   \begin{tabular*}{\textwidth}{@{}p{6cm}|ll}
      %      Tabelle, wenn alle Argumente gegeben sind
      %      \bfseries #1 & #2 & #3 \\
      %               & #4 & #5 \\
      %               & #6 & #7 \\
      %               & #8 & #9 \\
      %
      %
      \bfseries #1 & #2 & #3%
      %Prüfung der Argumente: wenn ein Argumentepaar (z.B. #4 und #5) leer/nicht %gegeben sind, wird für diese keine Zeile ausgegeben. Die Tabelle wird %entsprechend kürzer.
      %Sind nur 3 Argumente gegeben (=einzeilige Tabelle), kommt es zu einem %größeren Abstand nach der Tabelle, als wenn die Tabelle mehrzeilig %ist.
      %Eine unschöne Lösung ist das Hinpfuschen mit einem negativen \vspace
      %
      %Bewusste verwendung des Strings "leer", da meines Wissens \equal nur für %String-Vergleiche geeignet ist.
      \ifthenelse{\equal{#4}{leer}}{}{\\ & #4 & #5 }% unschöne Lösung: \vspace{-5mm} im Then-Zweig
      \ifthenelse{\equal{#6}{leer}}{}{\\ & #6 & #7 }%
      \ifthenelse{\equal{#8}{leer}}{}{\\ & #8 & #9 }%   
   \end{tabular*}%
}




\begin{document}
   
   \noindent
   \blindtext
   
   \skillGroup{Software}{\LaTeX}{anscheinend nicht so gut}{arg4}{arg5}{arg6}{arg7}{arg8}{arg9}
   
   \noindent
   \blindtext
   
   \skillGroup{Versionsverwaltungssoftware}
   {Git}{Anfänger}
   {leer}{leer}
   {leer}{leer}
   {leer}{leer}
   
   \noindent
   \blindtext
   
   \skillGroup{Software}{\LaTeX}{anscheinend nicht so gut}{arg4}{arg5}{arg6}{arg7}{leer}{leer}
   
   \noindent
   \blindtext
   
   
\end{document}

ChristophH

Beitrag von ChristophH »

Wow, das ging schnell! Stark!

Und die Lösung,.. nun ja, Latex ist halt doch kein Python :roll: :lol:
Ich hab dafür bestimmt zwei Tage vergoogelt :oops: :roll:
Vielen Dank für die Hilfe und die Info dazu!! Die schau ich mir gleich an.:)

Antworten