Unter Umständen, die ich nicht verstehe, wird der Inhalt einer tabularx-Umgebung an den linken Rand gequetscht. Das folgende Codebeispiel führt auf meinem System (mit xelatex) zu diesem Problem:
\documentclass{article} % -*- coding: utf-8-unix -*-
\usepackage[german]{babel}
\usepackage{geometry}
\usepackage{tabularx}
\geometry{a4paper,margin=1cm}
\begin{document}
\newcommand{\usrchord}[2]{
\vspace{0ex}
\begin{tabularx}{0.23\textwidth}{*{#1}{X}}
\Huge \bf #2
\end{tabularx}
}
\newcommand{\usrlyricsxx}[2]{
\vspace{0ex}
\begin{tabularx}{0.2\textwidth}{X|X}
#1 & #2 \\
\end{tabularx}
}
\begin{tabularx}{\textwidth}{*{4}{|X}|}
% Comment randomly any of the following lines to see the difference
\usrchord{1}{A} & \usrchord{1}{D} & \usrchord{1}{E} & \usrchord{1}{A} \\
\usrlyricsxx{a}{b} & \usrlyricsxx{c}{d} & \usrlyricsxx{e}{f} & \usrlyricsxx{g}{h} \\
\usrchord{1}{A} & \usrchord{1}{D} & \usrchord{1}{E} & \usrchord{1}{E} \\
\usrlyricsxx{i}{j} & \usrlyricsxx{k}{l} & \usrlyricsxx{m}{n} & \usrlyricsxx{o}{p} \\
\usrlyricsxx{q}{} \\
\end{tabularx}
\end{document}
Das Ergebnis ist die folgende Ausgabe:
Wenn, wie im Kommentar beschrieben, eine der Zeilen der tabularx-Umgebung kommentiert wird (zum Beispiel die erste), sieht das Ergebnis eher so aus, wie ich es erwarte:
Das obige Beispiel ist nur ein MWE stellvertretend für mehrere Konstellationen, in denen dies geschieht. Ich hoffe jedoch, dass das, was ich in diesem Beispiel falsch mache, für alle Konstellationen gilt.
Vielen Dank im Voraus für Ihre Hilfe.
Antwort1
\documentclass{article}
\usepackage{tabularx}
\usepackage[a4paper,margin=1cm]{geometry}
\newcommand{\usrchord}[2]{
\begin{tabularx}{\dimexpr\hsize+\tabcolsep\relax}{*{#1}{>{\bfseries\Huge}X}}
#2
\end{tabularx}
}
\newcommand{\usrlyricsxx}[2]{
\begin{tabular}{p{\dimexpr0.5\hsize-1.5\tabcolsep\relax}|
p{\dimexpr0.5\hsize-1.5\tabcolsep\relax}}
#1 & #2 \\
\end{tabular}
}
\usepackage{showframe}% for show page layout in this MWE ...
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{*{4}{|X}|}
\usrchord{1}{A} & \usrchord{1}{D} & \usrchord{1}{E} & \usrchord{1}{A} \\
\usrlyricsxx{a}{b} & \usrlyricsxx{c}{d} & \usrlyricsxx{e}{f} & \usrlyricsxx{g}{h} \\
\usrchord{1}{A} & \usrchord{1}{D} & \usrchord{1}{E} & \usrchord{1}{E} \\
\usrlyricsxx{i}{j} & \usrlyricsxx{k}{l} & \usrlyricsxx{m}{n} & \usrlyricsxx{o}{p} \\
\usrchord{2}{A & B}&\usrchord{4}{C & D & E & F} \\
\end{tabularx}
\end{document}
Änderungen:
- neue Definitionen von
\usrchord
und\usrlyricsxx
\usrchord
tabular
Standardumgebung mitp{...}
Spaltentyp verwenden- zeigte Verwendung
\usrchord
mit mehr Unterzellen
Antwort2
Der Grund, warum die Ausgabe für das MWE verstümmelt wird, ist die Anzahl der X
Spalten: Wenn diese Zahl zu groß wird, führt die Funktionsweise der tabularx
Umgebung zu einem internen Tex-Überlauf (sieheWie setze ich Tabularx mit 34 Spalten? (Fehlermeldung)). Und die Anzahl der X
für eine äußere tabularx
Umgebung berücksichtigten Spalten umfasst alle X
Spalten aller verschachtelten tabularx
Umgebungen.
Dies lässt sich leicht überprüfen, indem man \tracingtabularx
der Präambel des MWE aus der Frage Folgendes hinzufügt: Beim Ausführen xelatex
wird dann die folgende Debug-Ausgabe über die äußerste tabularx
Umgebung erzeugt:
(tabularx) Table Width Column Width X Columns
(tabularx) 2212.40952pt 540.60239pt 31
(tabularx) Don't exceed \maxdimen
Die Anzahl der 31 Spalten ist um eins mehr als die 4 X
Spalten der äußersten tabularx
Umgebung plus die 8 X
Spalten aufgrund der Verwendungen des \usrchord
Befehls plus die 2*9 X
Spalten aufgrund der Verwendungen des \usrlyricsxx
Befehls.
Zufälligerweise ist die Zahl 31 aus dem MWE die genaue Grenze, bei der der Überlauf auftritt: Die Anzahl der Spalten (minus eins) wird mit der anfänglichen Spaltenbreite multipliziert, das ergibt 31 * 540,60239pt = 16758,67409pt, was die Tex-Grenze von 16384pt minus Epsilon überschreitet. Das Entfernen einer einzigen X
Spalte (z. B. durch Herausnehmen eines der \usrchord
Befehle) vermeidet den Überlauf, da 30 * 540,60239pt = 16218,0717pt < 16384pt. Daher führte auch das Kommentieren beliebiger Zeilen der äußeren tabularx
Umgebung (wie in der Frage beschrieben) zu einer ausreichend kleinen Anzahl von Spalten, sodass alles wie erwartet funktionierte.
Das Problem des Überlaufs lässt sich nur lösen, indem man für jede tabularx
Umgebung sicherstellt, dass die aggregierte Anzahl der X
Spalten nicht zu groß wird. Dazu kann es notwendig sein, von in eine andere Umgebung zu wechseln . Für das Beispiel aus der Frage wäre das sowohl für den als auch für die Befehle tabularx
empfehlenswert : Wird nur einer davon ersetzt, tritt das Problem erneut auf, wenn weitere Zeilen hinzugefügt werden und damit wieder das Spaltenlimit überschritten wird.\usrchord
\usrlyricsxx