我将一些材料排版成两列,左边一列左对齐,右边一列右对齐(这是一场音乐会的歌曲列表,歌曲名称在左侧,作曲家姓名在右侧)。到目前为止,我的方法是使用\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\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}