En circunstancias que no entiendo, el contenido de un entorno tabularx queda comprimido en el margen izquierdo. El siguiente ejemplo de código produce el problema en mi sistema (usando xelatex):
\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}
Lo que da como resultado el siguiente resultado:
Si, como se describe en el comentario, se comenta una de las filas del entorno tabularx (por ejemplo, la primera), el resultado se parece más a lo que espero:
El ejemplo anterior es solo un MWE como representante de varias constelaciones cuando esto sucede. Sin embargo, espero que lo que estoy haciendo mal en este ejemplo se aplique a todas las constelaciones.
Gracias de antemano por tu ayuda.
Respuesta1
\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}
Cambios:
- nuevas definiciones de
\usrchord
y\usrlyricsxx
\usrchord
utilizartabular
entorno estándar conp{...}
tipo de columnas- mostró uso
\usrchord
con más subcélulas
Respuesta2
La razón por la que la salida del MWE se vuelve confusa es el número de X
columnas: si este número aumenta demasiado, el funcionamiento interno del tabularx
entorno provocará un desbordamiento interno de tex (consulte¿Cómo componer tabularx con 34 columnas? (Mensaje de error)). Y el número de X
columnas consideradas para un tabularx
entorno exterior incluye todas las X
columnas de todos tabularx
los entornos anidados.
Esto se puede verificar fácilmente agregando \tracingtabularx
al preámbulo del MWE la pregunta: La ejecución xelatex
produce el siguiente resultado de depuración sobre el tabularx
entorno más externo:
(tabularx) Table Width Column Width X Columns
(tabularx) 2212.40952pt 540.60239pt 31
(tabularx) Don't exceed \maxdimen
El número de 31 columnas es una más que las 4 X
columnas del tabularx
entorno más externo, más las 8 X
columnas debidas al uso del \usrchord
comando, más las 2 * 9 X
columnas debidas al uso del \usrlyricsxx
comando.
Casualmente, el número 31 del MWE es el límite exacto en el que se produce el desbordamiento: el número de columnas (menos una) se multiplica por el ancho de la columna inicial, es decir, 31 * 540,60239 pt = 16758,67409 pt, que excede el límite tex de 16384pt menos épsilon. Simplemente eliminando una sola de las X
columnas (por ejemplo, eliminando uno de los \usrchord
comandos) evitará el desbordamiento, ya que 30 * 540.60239pt = 16218.0717pt < 16384pt. Por lo tanto, también el comentario de cualquiera de las líneas del tabularx
entorno exterior (como se describe en la pregunta) conduce a un número suficientemente pequeño de columnas para que todo funcione como se esperaba.
El problema del desbordamiento sólo puede resolverse garantizando para cada tabularx
entorno que el número agregado de X
columnas no sea demasiado grande. Para lograr esto, puede que sea necesario cambiar tabularx
a un entorno diferente. Para el ejemplo de la pregunta, esto sería recomendable tanto para los comandos \usrchord
como para los \usrlyricsxx
: si solo se reemplaza uno de ellos, el problema volverá a ocurrir si se agregan más líneas y, por lo tanto, nuevamente se excederá el límite de columnas.