Tabelle in Abhängigkeit von Argumenten erstellen, IFTHENELSE

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Tabelle in Abhängigkeit von Argumenten erstellen, IFTHENELSE

von ChristophH » Di 14. Aug 2018, 09:37

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.:)

von Gast » Mo 13. Aug 2018, 19:43

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}

Tabelle in Abhängigkeit von Argumenten erstellen, IFTHENELSE

von ChristophH » Mo 13. Aug 2018, 18:57

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}

Nach oben