Em circunstâncias que não entendo, o conteúdo de um ambiente tabularx fica espremido na margem esquerda. O exemplo de código a seguir produz o problema no meu 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}
O que resulta na seguinte saída:
Se, conforme descrito no comentário, uma das linhas do ambiente tabularx for comentada (por exemplo, a primeira), o resultado ficará mais parecido com o que eu esperava:
O exemplo acima é apenas um MWE como representante de diversas constelações quando isso acontece. No entanto, espero que o que estou fazendo de errado neste exemplo se aplique a todas as constelações.
Agradeço antecipadamente por sua ajuda.
Responder1
\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}
Mudanças:
- novas definições de
\usrchord
e\usrlyricsxx
\usrchord
usetabular
ambiente padrão comp{...}
tipo de colunas- mostrou uso
\usrchord
com mais subcélulas
Responder2
A razão pela qual a saída do MWE fica distorcida é o número de X
colunas: se esse número ficar muito grande, o funcionamento interno do tabularx
ambiente levará a um estouro interno do tex (consulteComo compor tabularx com 34 colunas? (Mensagem de erro)). E o número de X
colunas consideradas para um tabularx
ambiente externo inclui todas as X
colunas de todos tabularx
os ambientes aninhados.
Isso pode ser facilmente verificado adicionando-se \tracingtabularx
ao preâmbulo do MWE da pergunta: A execução xelatex
produz a seguinte saída de depuração sobre o tabularx
ambiente mais externo:
(tabularx) Table Width Column Width X Columns
(tabularx) 2212.40952pt 540.60239pt 31
(tabularx) Don't exceed \maxdimen
O número de 31 colunas é um a mais que as 4 X
colunas do tabularx
ambiente mais externo, mais as 8 X
colunas devido aos usos do \usrchord
comando, mais as 2*9 X
colunas devido aos usos do \usrlyricsxx
comando.
Coincidentemente, o número 31 do MWE é o limite exato no qual ocorre o overflow: O número de colunas (menos um) é multiplicado pela largura inicial da coluna, ou seja, 31 * 540,60239pt = 16758,67409pt, que excede o limite tex de 16384pt menos épsilon. Apenas remover uma das X
colunas (por exemplo, retirando um dos \usrchord
comandos) evitará o overflow, pois 30 * 540.60239pt = 16218.0717pt < 16384pt. Portanto, também o comentário de qualquer uma das linhas do tabularx
ambiente externo (conforme descrito na pergunta) leva a um número suficientemente pequeno de colunas para que as coisas funcionem conforme o esperado.
O problema do overflow só pode ser resolvido garantindo para cada tabularx
ambiente que o número agregado de X
colunas não se torne muito grande. Para conseguir isso, pode ser necessário mudar tabularx
para um ambiente diferente. Para o exemplo da pergunta, isso seria recomendável para \usrchord
os comandos e \usrlyricsxx
: Se apenas um deles for substituído, o problema ocorrerá novamente se mais linhas forem adicionadas e, portanto, novamente o limite da coluna será excedido.