Discussion:
Tabellenzeilen konditional anzeigen
(zu alt für eine Antwort)
Stefan Möding
2021-01-23 09:05:24 UTC
Permalink
Hallo!

Ich versuche die Zeilen in einer tabular-Umgebung konditional anzuzeigen.
Eine Zeile soll nur dann erscheinen, falls ein entsprechendes Makro
existiert. Mittlerweile habe ich folgenden Code:

\documentclass{article}
\usepackage{ifthen}

\newcommand{\foocmd}{foo}
%\newcommand{\barcmd}{bar}

\begin{document}

\begin{tabular}{c|c}\
\ifthenelse{\isundefined{\foocmd}}{}{%
\foocmd & 1\\\hline
}
\ifthenelse{\isundefined{\barcmd}}{}{%
\barcmd & 2\\\hline
}
\end{tabular}

\end{document}

Das funktioniert solange, wie nicht die letzte Zeile betroffen ist. Falls wie
hier im Beispiel die letzte Zeile nicht ausgegeben werden soll (\barcmd ist
nicht definiert), dann erscheint trotzdem eine zusätzliche vertikale
Trennlinie.

Offenbar wird in dem Fall irgendeine Art von Leerraum erzeugt, so dass das
Setzen der ersten (leeren) Zelle dann stattfindet. Das betrifft auch nur die
erste Zelle, weil bei mehreren Spalten auch nur eine vertikale Trennlinie
erscheint.

Gibt es eine einfache Möglichkeit, dass da keine vertikale Trennlinie kommt?

Ja, ich weiß, dass sich vertikale Trennlinien in Tabellen nicht gehören...

--
Stefan
Ulrike Fischer
2021-01-23 12:12:04 UTC
Permalink
Post by Stefan Möding
Hallo!
Ich versuche die Zeilen in einer tabular-Umgebung konditional anzuzeigen.
Eine Zeile soll nur dann erscheinen, falls ein entsprechendes Makro
\documentclass{article}
\usepackage{ifthen}
ifthen is für sowas völlig ungeeignet, weil seine Tests nicht
expandierbar sind und daher Code "zurücklassen" (der dann z.B. zu
deiner Extrazeile führt).

Du musst solche Tests z.B. mit etoolbox oder mit expl3-Befehlen
machen:

\documentclass{article}
\usepackage{ifthen}

\newcommand{\foocmd}{foo}
%\newcommand{\barcmd}{bar}
\usepackage{etoolbox}
\begin{document}

\begin{tabular}{c|c}\
\ifthenelse{\isundefined{\foocmd}}{}{%
\foocmd & 1\\\hline
}
\ifthenelse{\isundefined{\barcmd}}{}{%
\barcmd & 2\\\hline
}
\end{tabular}
\quad
\begin{tabular}{c|c}\
\ifdef{\foocmd}{%
\foocmd & 1\\\hline
}{}
\ifdef{\barcmd}{%
\barcmd & 1\\\hline
}{}
\end{tabular}

\end{document}

Sei dir aber klar, dass Tabellen komplizierte Biester sind. Nicht
alles funktioniert so einfach, wie dein Beispiel.
--
Ulrike Fischer
http://www.troubleshooting-tex.de/
Stefan Möding
2021-01-24 16:24:12 UTC
Permalink
Post by Ulrike Fischer
Du musst solche Tests z.B. mit etoolbox oder mit expl3-Befehlen
Mit etoolbox sieht es gut aus. Vielen Dank!
Post by Ulrike Fischer
Sei dir aber klar, dass Tabellen komplizierte Biester sind. Nicht
alles funktioniert so einfach, wie dein Beispiel.
Für diesen Anwendungsfall scheint es ausreichend zu sein.
--
Stefan
Lesen Sie weiter auf narkive:
Loading...