我希望创建一个列表,其中列表中的每个项目都包含一个标题,后跟作者/姓名。
显然,我可以使用任何类型的基本文档类(想到文章或论文)轻松地做到这一点,但我想知道是否存在专门用于列表的特定文档类。
答案1
这是一个您可以构建的简单解决方案。您可以使用 来\parbox
表示作者和标题。通过指定所有 parbox 的宽度相同,它们将像在表格中一样对齐。(编辑您也可以使用表格:见下文。)
长度没有限制,因为每个\work
条目都被视为一个段落,TeX 会根据需要在它们之间进行分隔。您可以通过更改\parskip
(例如\usepackage{parskip}
)来控制条目之间的间距。
您还可以为姓氏和名字制作单独的框,或应用其他样式(例如,所有姓氏都以粗体显示)。
\documentclass{article}
\newlength{\authorwidth}
\newlength{\titlewidth}
\setlength{\authorwidth}{0.25\linewidth} % adjust as desired
\setlength{\titlewidth}{0.25\linewidth}
\newcommand{\work}[2]{%
\noindent
\parbox[t]{\authorwidth}{#1}%
\parbox[t]{\titlewidth}{\emph{#2}}\par%
}
\begin{document}
\work{John Doe}{Big Book}
\work{Jane Doe}{Bigger Book}
\work{Jim Doe}{Small Book}
\work{John Doe}{Big Book}
\work{Jane Doe}{Bigger Book}
\work{Jim Doe}{Small Book}
\work{John Doe}{Big Book}
\work{Jane Doe}{Bigger Book}
\work{Jim Doe}{Small Book}
\work{John Doe}{Big Book}
\work{Jane Doe}{Bigger Book}
\work{Jim Doe}{Small Book}
\end{document}
编辑
为了进行更多自定义,请定义一个通用命令来设置框,然后使用该命令来制作具有格式的特定命令。
\newcommand{\pair}[2]{%
\noindent
\parbox[t]{\authorwidth}{#1}%
\parbox[t]{\titlewidth}{#2}\par%
}
\newcommand{\pairHeader}[2]{%
\pair{\textbf{#1}}{\textbf{#2}}\smallskip%
}
\newcommand{\work}[2]{%
\pair{#1}{\emph{#2}}%
}
\begin{document}
\pairHeader{Author}{Title}
\work{John Doe}{Big Book}
...
@egreg 是对的,如果框超过一行,那么框后面就没有足够的空间,除非你像他演示的那样手动修复间距。但也许这不是问题。
编辑 2:表格版本
要解决对齐问题,您可以不使用 parbox,而是为每行使用单行表格环境。tabularx
您只需指定第一列的宽度。不过,这会产生“Underfull \hbox”警告。
\documentclass{article}
\usepackage{tabularx}
\newlength{\authorwidth}
\setlength{\authorwidth}{0.5\linewidth} % adjust as desired
\newcommand{\pair}[2]{%
\noindent
\begin{tabularx}{\linewidth}{p{\authorwidth} X}
#1 & #2\\
\end{tabularx}\par%
}
\newcommand{\pairHeader}[2]{%
\pair{\textbf{#1}}{\textbf{#2}}\smallskip%
}
\newcommand{\work}[2]{%
\pair{#1}{\emph{#2}}%
}
\begin{document}
\pairHeader{Author}{Title}
\work{John Doe}{Big Book}
\work{Jane Doe}{Bigger Book}
\work{Jim Doe}{Small Book}
\work{Jane Doe}{Bigger Book with a long title that will use two lines}
\work{Charles Louis Xavier~Joseph de~la Vall\'ee~Poussin}{Small Book}
\work{Adalbert Uthor}{All about authors}
\end{document}
答案2
对于这样的应用程序,我不会使用longtable
;只使用框来处理长标题(或名字很长的作者)。
然而,为了获得正确且均匀的垂直间距,需要一些技巧(见如何在使用 minipages (或 \parboxes) 时保持恒定的 baselineskip?)
\documentclass{article}
\newlength{\authorwidth}
\newlength{\titlewidth}
\setlength{\authorwidth}{0.3\columnwidth} % adjust as desired
\setlength{\titlewidth}{0.6\columnwidth} % adjust as desired
\newcommand{\work}[2]{%
\noindent
\parbox[t]{\titlewidth}{%
\raggedright\itshape#2\par
\xdef\titledepth{\the\prevdepth}%
\xdef\titlelines{\the\prevgraf}%
}%
\hspace{\dimexpr\columnwidth-\titlewidth-\authorwidth}%
\parbox[t]{\authorwidth}{%
\raggedright#1\par
\xdef\authordepth{\the\prevdepth}%
\xdef\authorlines{\the\prevgraf}%
}%
\par
\prevdepth=\ifnum\authorlines>\titlelines\space\authordepth\else\titledepth\fi
\medskip
}
\begin{document}
\work{John Doe}{Big Book}
\work{Jane Doe}{Bigger Book with a long title that will use two lines}
\work{Charles Louis Xavier~Joseph de~la Vall\'ee~Poussin}{Small Book}
\work{Adalbert Uthor}{All about authors}
\end{document}
使用\work
宏可以将输入和格式化分开;可以在定义中随意更改格式\work
。
(我显然受到了安德鲁·卡什纳 (Andrew Cashner) 的回答的启发,但做了一些改进和改变。)
设置标题和作者姓名后,我保存了最后一行的深度和行数,以便在设置框后使用以获得均匀的间距。标题或作者姓名中的强制新行应该用 标记\\
,而不是用空行标记。
答案3
我非常怀疑是否存在 LaTeX文档类那里有你感兴趣的列表类型。我必须承认,我完全不知道 LaTeX包裹它只起到这个作用 — — 仅此而已。
无论如何,设置一个longtable
环境来做你感兴趣的事并不困难。一个longtable
可以跨越很多页。通过p
对两列使用(修改后的)列类型,如果标题和名称的长度超出分配的列宽,它们将自动换行。您可以随意微调列的宽度和标题中提供的信息。
\documentclass{article}
\usepackage{longtable} % for 'longtable' environment
\usepackage{booktabs} % for \midrule and \bottomrule macros
\usepackage{array} % for \newcolumntype and \extrarowheight macros
\usepackage{ragged2e} % for \RaggedRight macro
\newcolumntype{P}[1]{>{\RaggedRight\arraybackslash}p{#1}}
\setlength\extrarowheight{1ex} % provide a bit more space between entries
\usepackage{lipsum} % for filler text
\begin{document}
\begin{longtable}{@{} P{0.4\textwidth} @{\hspace{0.05\textwidth}} P{0.55\textwidth} @{}}
Title & Author's name\\ \midrule \endhead
\bottomrule \endlastfoot
x & y\\
x & y\\
\lipsum*[2] & \lipsum*[3]\\
x & y\\
x & y\\
x & y\\
x & y\\
x & y\\
x & y\\
x & y\\
x & y\\
x & y\\
x & y\\
x & y\\
\end{longtable}
\end{document}