具有可变宽度列的表格,宽度根据行内容决定

具有可变宽度列的表格,宽度根据行内容决定

我将一些材料排版成两列,左边一列左对齐,右边一列右对齐(这是一场音乐会的歌曲列表,歌曲名称在左侧,作曲家姓名在右侧)。到目前为止,我的方法是使用\begin{tabular}{L{4.2cm}R{3.2cm}} 列定义如下:

\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

但是,使用这种方法后,我的表格会变得有点太宽。有些行左侧的内容较多(歌曲名称较长),有些行右侧的内容较多(作曲家姓名较长),但没有一个行同时具备这两种功能 - 所以如果我能找到一种根据内容自动调整列宽的方法,那将解决我的问题。

我不知道使用表格方法是否可行 - 如果有帮助的话,我很乐意切换到其他方法。最终目标是能够让列表中的行部分左对齐,其余部分右对齐:

|<- left edge of text         right edge of text->|
|The first song                        by Some Guy|
|                                   who lived then|
|                                                 |
|Some other song                   by Someone Else|
|and another one by the same guy    who also lived|
|                                                 |
|A fourth song    by a guy with a Really Long Name|
|                               aw, he's dead, Jim|

请注意“同一人的另一首歌”和“第四首歌”行是如何重叠的,即后者的右列开始于前者的左列结束之前。因此,我不想严格定义列宽,而是想定义整个表格的宽度(上方管道之间),其余部分将自动完成。

在 (Xe)LaTeX 中实现此目的的最佳方法是什么?

答案1

在此处输入图片描述

\documentclass{article}

\newcommand\zz[2]{\par
\bigskip
\noindent\begin{tabulary}{\textwidth}{LR}#1&#2\end{tabulary}\par
}
\usepackage{tabulary}


% http://tex.stackexchange.com/questions/87097/is-it-possible-to-make-an-underfull-tabulary-spread-out/87543#87543
\makeatletter

\def\foo#1\def\TY@ratio#2#3!!{
\def\TY@checkmin{#1%
#3}}
\expandafter\foo\TY@checkmin!!

\makeatother

\setlength\textwidth{10cm}

\begin{document}


\noindent X\dotfill X

\zz{The first song}{by Some Guy who lived then}

\zz{Some other song}{by Someone Else}

\zz{and another one by the same guy}{who also lived}


\zz{A fourth song }{by a guy with a Really Long Name
                               aw, he's dead, Jim}


\noindent X\dotfill X

\end{document}

相关内容