Longtable, Spaltenbreite und Seitenbreite

Tabellen und Grafiken erstellen und anordnen


AaronK
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: So 2. Mai 2021, 09:29

Longtable, Spaltenbreite und Seitenbreite

Beitrag von AaronK »

Wie kann ich in einer Longtable Umgebung die Tabelle in ihren äußeren Maßen so anpassen, dass die Tabelle mittig und ein wenig kleiner als der Satzspiegel ist. In dem folgenden Beispiel möchte ich, dass die Maße für die Spalte 2 und 3 automatisch die gleiche Breite haben. Die Maße für F{38mm}F{38mm} sind gemeint. Läßt die die Tabelle so gestalten, das die Breite für die Spalten 2, 3 und wenn vorhanden auch eine Spaltenbreite 4 und 5 automatisch berechnet werden? Spalte 1 hat die Breite automatisch, weil es keinen Zeilenumbruch gibt.

\documentclass[8pt,openright,twoside]{extbook}
\usepackage[no-math]{fontspec}
\usepackage{xunicode}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

% Packages
%\usepackage{amsmath,amsfonts,amsthm,bm}
\usepackage{booktabs}
\usepackage{titlesec,color}
\usepackage[table]{xcolor}
\usepackage{array}
\usepackage{footnote}
\usepackage{forloop}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{siunitx}
\usepackage{supertabular}
\usepackage{paralist}
\usepackage{ragged2e}
\usepackage{subcaption}
\usepackage{xurl}

%% Set paper size
% DIN B6
\usepackage[
  b6paper,
  left=10mm,
  right=10mm,
  top=10mm,
  bottom=10mm,
%  includeheadfoot,
  headsep=0mm,
  footskip=5mm,
%  nomarginpar,     % kein Platz für Randnotizen
  showframe,       % Anzeige des Satzspiegels
]{geometry}

%% Chapter formating
\newcommand{\hsp}{\hspace{10pt}}
\titleformat{\chapter}[hang]{\large\bfseries}{\thechapter\hsp{|}\hsp}{0pt}{\large\bfseries}
\titlespacing*{\chapter}{0pt}{0pt}{0pt}

%% Section formating
\titleformat*{\section}{\normalsize\bfseries}
\titleformat*{\subsection}{\small\bfseries}
\titleformat*{\subsubsection}{\small\bfseries}
\titleformat*{\paragraph}{\footnotesize\bfseries}

%% Don’t add extra space after sentences
\frenchspacing

%% Set parindent
%\setlength{\parindent}{0pt}
\setlength{\parskip}{.5em}

\setlength{\LTpre}{6pt}
\setlength{\LTpost}{6pt}

%% Sorgt beim Dokumenttyp book dafür, daß kein Ausgleich des unteren Seitenrandes durch Dehnung der Absatzabstände durchgeführt wird.
\raggedbottom

%% Ausrichtung und Silbentrennung in einer Tabelle
\newcolumntype{F}[1]{>{\RaggedRight\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\newcolumntype{T}[1]{>{\Centering\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\newcolumntype{K}[1]{>{\RaggedLeft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}


\begin{document}
\renewcommand{\arraystretch}{1.1}
\begin{longtable}{@{\extracolsep{\fill}}lF{38mm}F{38mm}@{}}
\textbf{Text 1} & \textbf{Frage (Text 2)} & \textbf{Text 3} \\\midrule
\endhead
Text 1 & Das ist ein langer Text & Das ist ein langer Text \\\midrule
\end{longtable}

\end{document}

hmhmhm

Re: Longtable, Spaltenbreite und Seitenbreite

Beitrag von hmhmhm »

Ich bin nicht sicher, dass ich genau verstehe, was du suchst. Aber eventuell sind ja X-Spalten mit Paket xltabular, also eine Verbindung von tabularx mit longtable (Beispiel auf das Wesentliche gekürzt):

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{xltabular}
\usepackage{ragged2e}
\usepackage{booktabs}
\usepackage{blindtext}
\newcolumntype{F}[1]{>{\RaggedRight\hspace{0pt}}X}
\begin{document}
\renewcommand{\arraystretch}{1.1}
\begin{xltabular}{.9\textwidth}{@{}lXX@{}}
\textbf{Text 1} & \textbf{Frage (Text 2)} & \textbf{Text 3} \\\midrule
\endhead
\midrule
\endfoot
Text 1 & Das ist ein langer Text & Das ist ein langer Text \\
Text 2 & \blindtext & \blindtext \\
\end{xltabular}

\end{document}

AaronK
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: So 2. Mai 2021, 09:29

Re: Longtable, Spaltenbreite und Seitenbreite

Beitrag von AaronK »

Das ist genau die Löung, nach der ich gesucht habe. Leider bekomme ich folgende Fehlermeldungen:

Underfull \hbox (badness 1377) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 1270) in paragraph at lines 310--310 
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 1838) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 1609) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 1062) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 3396) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 1442) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 3364) in paragraph at lines 310--310 
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 3568) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 6445) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 4181) in paragraph at lines 310--310
‪content/chapter-02.tex, 310‬

Underfull \hbox (badness 2961) in paragraph at lines 310--310

Gute*r Gȧst*in

Re: Longtable, Spaltenbreite und Seitenbreite

Beitrag von Gute*r Gȧst*in »

Schmale Spalten zu umbrechen ist immer problematisch. Da müssen Kompromisse eingegangen werden. Fehlermeldungen sind das übrigens nicht. Das sind Hinweise oder allenfalls Warnungen. Aber natürlich kann auch auf den Blocksatz verzichtet und die angedeuteten F-Spalten auf Basis von X-Spalten genutzt werden:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{xltabular}
\usepackage{ragged2e}
\usepackage{booktabs}
\usepackage{blindtext}
\newcolumntype{F}[1]{>{\RaggedRight\hspace{0pt}}X}
\begin{document}
\renewcommand{\arraystretch}{1.1}
\begin{xltabular}{.9\textwidth}{@{}lXX@{}}
\textbf{Text 1} & \textbf{Frage (Text 2)} & \textbf{Text 3} \\\midrule
\endhead
\midrule
\endfoot
Text 1 & Das ist ein langer Text & Das ist ein langer Text \\
Text 2 & \blindtext & \blindtext \\
\end{xltabular}

\end{document}

Dann sind die Warnungen weg, der Blocksatz aber natürlich auch.


AaronK
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: So 2. Mai 2021, 09:29

Re: Longtable, Spaltenbreite und Seitenbreite

Beitrag von AaronK »

Ich möchte in Bezug auf den Blocksatz und den Warnungen, die ausgegeben werden einige Fragen stellen. Mit dem Parameter F{30mm} wird kein Blocksatz verwendet. Die Warnungen sind verschwunden. Der Nachteil ist, dass ich die Weite für jede Tabelle von Hand korregieren muß.

Wird der Parameter X verwendet, dann wird Blocksatz gesetzt. Zitat aus dem vorherigen Post: natürlich kann auch auf den Blocksatz verzichtet und die angedeuteten F-Spalten auf Basis von X-Spalten genutzt werden.

Wie löse ich das Problem, ohne das ich den F Parameter für jede Tabelle von Hand setzen muß?

Tabelle mit dem Parameter X

% !TEX xelatex
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{xltabular}
\usepackage{ragged2e}
\usepackage{booktabs}
\usepackage{blindtext}
\newcolumntype{F}[1]{>{\RaggedRight\hspace{0pt}}X}

\begin{document}
\renewcommand{\arraystretch}{1.1}
\begin{xltabular}{.9\textwidth}{@{}lXcccc@{}}\toprule
\textbf{Prefix} & \textbf{Entity} & \textbf{Cont} & \textbf{ITU} & \textbf{CQ} & \textbf{Entity Code} \\\midrule
\endhead
\textit{9S4} & Saarland (08.11.1947 bis 31.03.1957) & EU & 28 & 14 & 210 \\
\texttt{DL} & Federal Republic of Germany (ab 17.09.1973) & EU & 28 & 14 & 230 \\
\texttt{I1} & Trieste (bis 31.03.1957) & EU & 28 & 15 & 271 \\
\texttt{OK} & Czechoslovakia (bis 31.12.1992) & EU & 28 & 15 & 218 \\
\texttt{R1MV} & Malyj Vysotskij I. (bis  \\ & 17.02.2012) & EU & 29 & 16 & 151 \\
\texttt{UA1N} & Karelia (ab 01.07.1960 bis 31.12.1991) & EU & (E) & 16 & 054 \\
\texttt{UN} & Karelo-Finnish Republic (bis 30.06.1960) & EU & 19 & 16 & 128 \\
\texttt{Y2} & German Democratic Republic (ab 17.09.1973 bis 02.10.1990) & EU & 28 & 14 & 229 \\
\end{xltabular} 
\end{document}

Tabelle mit dem Parameter F

% !TEX xelatex
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{xltabular}
\usepackage{ragged2e}
\usepackage{booktabs}
\usepackage{blindtext}
\newcolumntype{F}[1]{>{\RaggedRight\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}

\begin{document}

\renewcommand{\arraystretch}{1.1}
\begin{xltabular}{.9\textwidth}{@{}lF{30mm}cccc@{}}\toprule
\textbf{Prefix} & \textbf{Entity} & \textbf{Cont} & \textbf{ITU} & \textbf{CQ} & \textbf{Entity Code} \\\midrule
\endhead
\textit{9S4} & Saarland (08.11.1947 bis 31.03.1957) & EU & 28 & 14 & 210 \\
\texttt{DL} & Federal Republic of Germany (ab 17.09.1973) & EU & 28 & 14 & 230 \\
\texttt{I1} & Trieste (bis 31.03.1957) & EU & 28 & 15 & 271 \\
\texttt{OK} & Czechoslovakia (bis 31.12.1992) & EU & 28 & 15 & 218 \\
\texttt{R1MV} & Malyj Vysotskij I. (bis  \\ & 17.02.2012) & EU & 29 & 16 & 151 \\
\texttt{UA1N} & Karelia (ab 01.07.1960 bis 31.12.1991) & EU & (E) & 16 & 054 \\
\texttt{UN} & Karelo-Finnish Republic (bis 30.06.1960) & EU & 19 & 16 & 128 \\
\texttt{Y2} & German Democratic Republic (ab 17.09.1973 bis 02.10.1990) & EU & 28 & 14 & 229 \\
\end{xltabular} 
\end{document}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2315
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: Longtable, Spaltenbreite und Seitenbreite

Beitrag von Bartman »

\newcolumntype{F}[1]{>{\RaggedRight\hspace{0pt}}X}

Man kann zwar in der Spaltendefinition der Tabellenumgebung F{} verwenden, aber da die Angabe der Spaltenbreite wegen des Spaltentyps X nicht benötigt wird, ist [1] verzichtbar.

% !TEX xelatex
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{xltabular}
\usepackage{ragged2e}
\usepackage{booktabs}

\newcolumntype{F}{>{\RaggedRight\hspace{0pt}}X}% ohne Argument nutzbar

\begin{document}
\renewcommand{\arraystretch}{1.1}
\begin{xltabular}{.9\textwidth}{@{}>{\ttfamily}lFcccc@{}}
\toprule
\normalfont\textbf{Prefix} & \textbf{Entity} & \textbf{Cont} & 
\textbf{ITU} & \textbf{CQ} & \textbf{Entity Code} \\
\midrule
\endhead
\normalfont\textit{9S4} & Saarland (08.11.1947 bis 31.03.1957) & EU & 28 & 14 & 210 \\
DL & Federal Republic of Germany (ab 17.09.1973) & EU & 28 & 14 & 230 \\
I1 & Trieste (bis 31.03.1957) & EU & 28 & 15 & 271 \\
OK & Czechoslovakia (bis 31.12.1992) & EU & 28 & 15 & 218 \\
R1MV & Malyj Vysotskij I. (bis 17.02.2012) & EU & 29 & 16 & 151 \\
UA1N & Karelia (ab 01.07.1960 bis 31.12.1991) & EU & (E) & 16 & 054 \\
UN & Karelo-Finnish Republic (bis 30.06.1960) & EU & 19 & 16 & 128 \\
Y2 & German Democratic Republic (ab 17.09.1973 bis 02.10.1990) & EU & 28 & 14 & 229 \\
\end{xltabular} 
\end{document}
Zuletzt geändert von Bartman am Fr 11. Jun 2021, 19:59, insgesamt 1-mal geändert.

Gute*r Gȧst*in

Re: Longtable, Spaltenbreite und Seitenbreite

Beitrag von Gute*r Gȧst*in »

Oh! Entschuldigung! Da hatte ich wohl noch den Original-Code im Copy&Paste-Puffer. Ich meinte natürlich:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{xltabular}
\usepackage{ragged2e}
\usepackage{booktabs}
\usepackage{blindtext}
\newcolumntype{F}{>{\RaggedRight\hspace{0pt}}X}
\begin{document}
\renewcommand{\arraystretch}{1.1}
\begin{xltabular}{.9\textwidth}{@{}lFF@{}}
\textbf{Text 1} & \textbf{Frage (Text 2)} & \textbf{Text 3} \\\midrule
\endhead
\midrule
\endfoot
Text 1 & Das ist ein langer Text & Das ist ein langer Text \\
Text 2 & \blindtext & \blindtext \\
\end{xltabular}

\end{document}

Dessen ungeachtet, empfehle ich, \newcolumntype und >{…} für die Spaltendeklaration in der array-Anleitung nachzulesen, \RaggedRight in der ragged2e-Anleitung, die Spaltendeklaration mit X in der tabularx-Anleitung (und prinzipiell die Verwendung von xltabular natürlich auch noch in der kurzen xltabular-Anleitung). Es ist bekanntlich immer von Vorteil, den verwendeten Code auch zu verstehen. In Abschnitt 2.5 der xltabular-Anleitung gibt es übrigens ein Beispiel, das obigem Code nicht unähnlich ist und somit direkt auf deinen Fall anwendbar wäre. :wink:


Antworten