Eigene Tabellenumgebung

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: Eigene Tabellenumgebung

Re: Eigene Tabellenumgebung

von Bartman » Di 18. Aug 2020, 18:22

Ein Wechsel von ltablex zu xltabular bietet eine weitere Möglichkeit, die ohne etoolbox oder xpatch auskommt:

\documentclass{scrbook}

\usepackage{xltabular}
\usepackage{setspace}
\usepackage{blindtext}
\usepackage{showframe}

\newenvironment{tabelle}[2]
  {\setstretch{.7}%
   \renewcommand{\arraystretch}{1.5}%
   \xltabular{#1}{#2}}
  {\endxltabular}

\begin{document}
\begin{tabelle}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\blindtext & \blindtext\\\hline
\end{tabelle}
\end{document}

Re: Eigene Tabellenumgebung

von ThoRie » Di 18. Aug 2020, 17:29

Okay, vielen, vielen Dank für die Hilfe. Das ist wirklich perfekt :D

Re: Eigene Tabellenumgebung

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}

Eigene Tabellenumgebung

von ThoRie » Di 18. Aug 2020, 12:04

Hallo, ich habe ein Problem mit folgendem Code:

\documentclass{scrbook}

\usepackage{ltablex}
\usepackage{setspace}
\newenvironment{tabelle}[2]{%
	\begin{spacing}{.7}%
		\renewcommand{\arraystretch}{1.5}%
		\begin{tabularx}{#1}{#2}%
		}%
	{%
\end{tabularx}%
\end{spacing}%
}
\usepackage{blindtext}
\begin{document}

\begin{tabularx}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\end{tabularx}



\end{document}

Da spuckt er mir eine Fehlermeldung aus, die ich leider null verstehe.
Ich möchte eben nicht jedes Mal folgendes eingeben müssen:

\begin{spacing}{.7}
		\renewcommand{\arraystretch}{1.5}
\begin{tabularx}{\linewidth}{|X|X|}
\hline
\blindtext & \blindtext\\\hline
\end{tabularx}
\end{spacing}


Präambel ist im zweiten Code bis auf die Umgebungsdefinition die selbe.
Kann mir jemand sagen, was der Fehler ist und wie man den behebt.

Falls ihr so tief drin stecken solltet, könnt ihr mir auch sehr gerne erklären (das aber dann bitte per PN, weil hier wäre es OT) wie dieser Fehler entsteht. Vielleicht habe ich mit dem irgendwann noch einmal zu tun und kann dann auch selbst erstmal herumprobieren :D


Nach oben