Seite 1 von 1

newenvironment und xltabular

Verfasst: Di 19. Mär 2019, 21:51
von godi
Hallo,
ich möchte xltabular in newenvironment einsetzen.

Leider wird dann der End-Teil von newenvironment ignoriert.
Beispiel:
\documentclass{scrartcl}
\usepackage{xltabular}

% Funktioniert leider nicht => Error
\newenvironment{MyXLTabular}{%
\begin{xltabular}{\linewidth}{|X|}
\hline
}
{
Sonstiges\\ 
\hline
\end{xltabular}
}

% Endbereich wird ignoriert.
\newenvironment{MyXLTabular2}{%
\xltabular{\linewidth}{|X|}
\hline
}
{
Sonstiges\\  % Sonstiges und hline werden nicht dargestellt
\hline
\endxltabular
}
  
\begin{document}
\begin{MyXLTabular2}
MyXLTabular\\
\end{MyXLTabular2}

\end{document}
Weiß jemand wie dies funktionieren könnte, bzw hat Tipps für mich?

godi

Verfasst: Mi 20. Mär 2019, 09:10
von Gast
Diese Problematik wird bereits in der Anleitung zu tabularx behandelt (derzeit auf Seite 4). Bei xltabular ist die Problematik noch verstärkt. Im konkreten Beispiel ist natürlich xltabular gar nicht notwendig. Hier würde longtable vollkommen ausreichen:
\documentclass{scrartcl}
\usepackage{longtable}

\newenvironment{MyXLTabular}{%
\longtable{|p{\dimexpr \textwidth-2\tabcolsep\relax}|}
\hline
}
{
Sonstiges\\  % Sonstiges und hline werden nicht dargestellt
\hline
\endlongtable
}

\begin{document}
\begin{MyXLTabular}
MyXLTabular\\
\end{MyXLTabular}

\end{document}
Wobei man bei einer longtable Anfang und Ende eigentlich per \endfirsthead und \endlastfoot bereits am Anfang der Tabelle definiert:
\documentclass{scrartcl}
\usepackage{longtable}

\newenvironment{MyXLTabular}{%
  \longtable{|p{\dimexpr \textwidth-2\tabcolsep\relax}|}
  \hline
  \endfirsthead
  Sonstiges\\
  \hline
  \endlastfoot
}{%
  \endlongtable
}

\begin{document}
\begin{MyXLTabular}
MyXLTabular\\
\end{MyXLTabular}

\end{document}
Und das bringt und dann darauf, wie man das auch bei xltabular[/x] korrekt löst: [code]\documentclass{scrartcl}
\usepackage{xltabular}

\newenvironment{MyXLTabular}{%
\xltabular{\linewidth}{|X|}
\hline
\endfirsthead
Sonstiges\\
\hline
\endlastfoot
}{%
\endxltabular
}

\begin{document}
\begin{MyXLTabular}
MyXLTabular\\
\end{MyXLTabular}

\end{document}[/code]
Es kommt also eigentlich nur darauf an, die Umgebung auch wirklich als mehrseitige Tabelle, bestehend aus: Tabellenkopf, Tabelleninhalt und Tabellenfuß, zu betrachten und dann korrekt entsprechend zu verwenden.

Verfasst: Mi 20. Mär 2019, 12:46
von godi
Hallo,
Herzlichen Dank!

Hat mir sehr weitergeholfen => funktioniert jetzt.

Dadurch habe ich in der Anleitung auch noch was gefunden wie bei jedem Seitenumbruch ein Header + "Fortsetzung" eingefügt werden kann:
\documentclass{scrartcl}
\usepackage{xltabular}
\usepackage{forloop}

\newenvironment{MyXLTabular}{%
\xltabular{\linewidth}{|X|}
\hline
Kopfzeile\\
\hline
\endfirsthead
\multicolumn{1}{@{}l}{\ldots\ \small Fortsetzung}\\
\hline
Kopfzeile2\\
\hline
\endhead
\hline
\multicolumn{1}{r@{}}{\small Fortsetzung\ldots}\\
\endfoot
\hline
\endlastfoot
}
{
\endxltabular
}
  
\begin{document}

\newcounter{ct}
\begin{MyXLTabular}
\forloop{ct}{1}{\value{ct} < 100}{Zeile \thect\\}%
Row \thect
\end{MyXLTabular}

\end{document}

Verfasst: Mi 20. Mär 2019, 12:58
von Gast
Ich empfehle übrigens, dir beim Schreiben von LaTeX-Code von vornherein einen Stil anzugewöhnen, bei dem unerwünschte Leerzeichen beispielsweise durch nicht auskommentierten Zeilenenden nach { oder } ausgeschlossen sind und bei der durch Einrückung die einzelnen Argumente oder Gruppen leichter erkennbar sind.