von MoeWe » Di 18. Aug 2020, 17:22
Die Tabellen-Umgebung tabularx aus dem tabularx-Paket ist etwas speziell. Man kann \begin{tabularx}{<width>}{<col spec>}...\end{tabularx} nicht im Start- und Endcode von \newenvironment benutzen, da die Implementierung von tabularx nach dem String \end{tabularx} sucht, um zum Ende zu kommen. Der Workaround besteht darin, die Makro-Version \tabularx{<width>}{<col spec>}...\endtabularx zu verwenden. Siehe https://tex.stackexchange.com/q/42325/35864.
Bei ltablex scheint das nicht zu funktionieren. Da geht es dann aber mit einem anderen Trick: https://tex.stackexchange.com/q/208850/35864.
\documentclass{scrbook}
\usepackage{ltablex}
\usepackage{setspace}
\usepackage{environ}
\NewEnviron{tabelle}[2]{%
\begin{spacing}{.7}%
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{#1}{#2}%
\BODY
\end{tabularx}%
\end{spacing}}
\usepackage{blindtext}
\begin{document}
\begin{tabelle}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabelle}
\clearpage
\begin{spacing}{.7}%
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabularx}%
\end{spacing}
\end{document}
Eine andere Möglichkeit ist in https://tex.stackexchange.com/q/196993/35864 gezeigt. Die schien aber bei mir nicht zu funktionieren, wenn die spacing-Umgebung noch involviert war. In diesem Fall scheint es mir aber möglich, auf spacing als Umgebung zu verzichten und stattdessen einfach \setspace zu nehmen (die Zusätzliche Mühe, die spacing sich macht, den vorherigen Absatz zu beenden und am Übergang zum folgenden Absatz die Abstände richtig zu setzen, lohnt sich bei einer Tabelle wohl eher nicht). Dann ginge auch
\documentclass{scrbook}
\usepackage{setspace}
\usepackage{ltablex}
\usepackage{etoolbox}
\makeatletter
% get rid of \par (there are two empty lines in the definition by ltablex)
\patchcmd{\TX@endtabularx}{\par}{}{}{}
\patchcmd{\TX@endtabularx}{\par}{}{}{}
\patchcmd{\TX@endtabularx}
{\end{tabularx}}
{\endtabularx\endgroup}
{}{}
\makeatother
\newenvironment{tabelle}[2]
{\setstretch{.7}%
\renewcommand{\arraystretch}{1.5}%
\tabularx{#1}{#2}}
{\endtabularx}
\usepackage{blindtext}
\begin{document}
\begin{tabelle}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabelle}
\clearpage
\begin{spacing}{.7}%
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabularx}%
\end{spacing}
\end{document}
Die Tabellen-Umgebung `tabularx` aus dem `tabularx`-Paket ist etwas speziell. Man kann `\begin{tabularx}{<width>}{<col spec>}...\end{tabularx}` nicht im Start- und Endcode von `\newenvironment` benutzen, da die Implementierung von `tabularx` nach dem String `\end{tabularx}` sucht, um zum Ende zu kommen. Der Workaround besteht darin, die Makro-Version `\tabularx{<width>}{<col spec>}...\endtabularx` zu verwenden. Siehe https://tex.stackexchange.com/q/42325/35864.
Bei `ltablex` scheint das nicht zu funktionieren. Da geht es dann aber mit einem anderen Trick: https://tex.stackexchange.com/q/208850/35864.
```
\documentclass{scrbook}
\usepackage{ltablex}
\usepackage{setspace}
\usepackage{environ}
\NewEnviron{tabelle}[2]{%
\begin{spacing}{.7}%
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{#1}{#2}%
\BODY
\end{tabularx}%
\end{spacing}}
\usepackage{blindtext}
\begin{document}
\begin{tabelle}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabelle}
\clearpage
\begin{spacing}{.7}%
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabularx}%
\end{spacing}
\end{document}
```
Eine andere Möglichkeit ist in https://tex.stackexchange.com/q/196993/35864 gezeigt. Die schien aber bei mir nicht zu funktionieren, wenn die `spacing`-Umgebung noch involviert war. In diesem Fall scheint es mir aber möglich, auf `spacing` als Umgebung zu verzichten und stattdessen einfach `\setspace` zu nehmen (die Zusätzliche Mühe, die `spacing` sich macht, den vorherigen Absatz zu beenden und am Übergang zum folgenden Absatz die Abstände richtig zu setzen, lohnt sich bei einer Tabelle wohl eher nicht). Dann ginge auch
```
\documentclass{scrbook}
\usepackage{setspace}
\usepackage{ltablex}
\usepackage{etoolbox}
\makeatletter
% get rid of \par (there are two empty lines in the definition by ltablex)
\patchcmd{\TX@endtabularx}{\par}{}{}{}
\patchcmd{\TX@endtabularx}{\par}{}{}{}
\patchcmd{\TX@endtabularx}
{\end{tabularx}}
{\endtabularx\endgroup}
{}{}
\makeatother
\newenvironment{tabelle}[2]
{\setstretch{.7}%
\renewcommand{\arraystretch}{1.5}%
\tabularx{#1}{#2}}
{\endtabularx}
\usepackage{blindtext}
\begin{document}
\begin{tabelle}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabelle}
\clearpage
\begin{spacing}{.7}%
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabularx}%
\end{spacing}
\end{document}
```