我正在排版古典文学中的一段文字。其中一部分由编号的诗句组成。对于每一行诗句,我想显示 (1) 行号、(2) 诗句文本和 (3) 可选的“从句”。
由于这些经文有成千上万条,而且大多数都很短,所以我想将文档设置为两列。有些经文很长,因此像段落一样填充它们很重要。最后,经文左侧出现的行号应该手动设置(它们由脚本生成)。
以下是我目前想到的最好的办法(请注意,命令“clause”的定义是为了确保即使在换行之后子句也出现在右侧):
\documentclass[9pt, DIV=22]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\setlength{\parindent}{0cm}
\begin{document}
\twocolumn
\newcommand\clause[1]{{%
\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\textbf{#1}%
\parfillskip=0pt \finalhyphendemerits=0 \par}}
\section{Traktate}
\subsection{Ad Demetrianum}
{\tiny 1} \textbf{1} Oblatrantem te
% Most verses are short.
{\tiny 2} et aduersus Deum
{\tiny 3} qui unus et uerus est
\clause{T2gdz}
{\tiny 4} ore sacrilego
\clause{Tg}
{\tiny 5} et uerbis impiis
{\tiny 6} obstrepentem frequenter,
\clause{Pg}
{\tiny 7} Demetriane,
{\tiny 8} contempseram
{\tiny 9} uerecundius et melius existimans
{\tiny 10} errantis inperitiam silentio spernere
\clause{T2d}
{\tiny 11} quam loquendo dementis insaniam prouocare.
\clause{V3d}
{\tiny 12} Nec hoc sine magisterii diuini auctoritate faciebam,
\clause{TT12g}
{\tiny 13} cum scriptum sit:
% Many verses span multiple lines, a few are very long.
{\tiny 14} In aures inprudentis noli quicquam dicere, ne quando audierit inrideat sensatos sermones tuos, [Prou. 23, 9]
\clause{bib}
\end{document}
我想知道:有没有办法将行号放在“自己的列”中?这意味着数字是右对齐的,并且诗句文本设置在行号右侧的单独列中。
显而易见的解决方案似乎是使用表格。这里的问题是大多数表格包不支持 \twocolumn 或 multicol 以及跨多页的表格。我几乎成功地使用了“tabu”包使其与多列一起工作的技巧。但我一直无法解决的一个问题是,使用表格时,长诗句不会分页。因为有些诗句占了半页,所以这是不可接受的。
如果有一种方法可以在文本填充后指定添加到每个物理行的前缀,则可以修改上述示例以满足所有要求。
答案1
这种方法不需要任何包,但它确实需要重新格式化输入以使用带有三个参数的命令,通常第三个参数为空。
\documentclass[11pt]{book}
\newenvironment{versus}{%
\begingroup
\parindent0pt
\leftskip2.5em\relax
\rightskip1em plus.75\textwidth\relax
\parfillskip0pt\relax
\parskip2pt plus 1pt minus .5pt
}{%
\par
\endgroup
}
\newcommand{\xverse}[3]{%
\leavevmode
\llap{\tiny #1\quad}\ignorespaces#2\unskip
\penalty9999 \hbox{}\nobreak\hfill{\bfseries#3\unskip}\kern-1em\null
\par
}
\begin{document}
\section{Traktate}
\subsection{Ad Demetrianum}
\begin{versus}
\xverse{1}{\textbf{1} Oblatrantem te}
{}
% Most verses are short.
\xverse{2}{et aduersus Deum}
{}
\xverse{3}{qui unus et uerus est}
{T2gdz}
\xverse{4}{ore sacrilego}
{Tg}
\xverse{5}{et uerbis impiis}
{}
\xverse{6}{obstrepentem frequenter,}
{Pg}
\xverse{7}{Demetriane,}
{}
\xverse{8}{contempseram}
{}
\xverse{9}{uerecundius et melius existimans}
{}
\xverse{10}{errantis inperitiam silentio spernere}
{T2d}
\xverse{11}{quam loquendo dementis insaniam prouocare.}
{V3d}
\xverse{12}{Nec hoc sine magisterii diuini auctoritate faciebam,}
{TT12g}
\xverse{13}{cum scriptum sit:}
{}
% Many verses span multiple lines, a few are very long.
\xverse{14}{In aures inprudentis noli quicquam dicere, ne quando audierit inrideat sensatos sermones tuos, [Prou. 23, 9]}
{bib}
\end{versus}
\end{document}
结果如下:
我已经将它很好地用于目录和类似内容。请注意,它\rightskip
有一个较小的默认缩进,因此,如果存在第三个参数,它总是会突出一点,以使其更加明显。
如果合适的话,自动生成数字会很容易。
一种更紧凑(并且在我看来更简洁)的方法是使用分隔宏来表示各个诗句,如果最后一个参数不存在,则无需输入一组空括号,但这不是“乳胶方式”。为了论证的目的,这里有一种可能性(假设大于或小于符号永远不会出现在文本中):
\def\xverse #1>#2>#3<{ as above }
\xverse 1>\textbf{1} Oblatrantem te><
\xverse 3> qui unus et uerus est> T2gdz<
\unskip
使用和来防止输入中的多余空格\ignorespaces
。
答案2
您可以使用lineno
包。
\documentclass[9pt, DIV=22]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\setlength{\parindent}{0cm}
\usepackage[switch]{lineno}
\begin{document}
\twocolumn
\newcommand\clause[1]{{%
\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\textbf{#1}%
\parfillskip=0pt \finalhyphendemerits=0 \par}}
\section{Traktate}
\subsection{Ad Demetrianum}
\begin{linenumbers}
\textbf{1} Oblatrantem te
% Most verses are short.
et aduersus Deum
qui unus et uerus est
\clause{T2gdz}
ore sacrilego
\clause{Tg}
et uerbis impiis
obstrepentem frequenter,
\clause{Pg}
Demetriane,
contempseram
uerecundius et melius existimans
errantis inperitiam silentio spernere
\clause{T2d}
quam loquendo dementis insaniam prouocare.
\clause{V3d}
Nec hoc sine magisterii diuini auctoritate faciebam,
\clause{TT12g}
cum scriptum sit:
% Many verses span multiple lines, a few are very long.
In aures inprudentis noli quicquam dicere, ne quando audierit inrideat sensatos sermones tuos, [Prou. 23, 9]
\clause{bib}
\end{linenumbers}
\end{document}
您可以在文档中间的某个位置重置行号(当您需要时)
\resetlinenumber[<number>]
或使用
\begin{linenumbers}[1]
或使用带星号的版本
\begin{linenumbers*}
使用xtab
包:这里您必须手动固定第二列的宽度。
\documentclass[9pt, DIV=22]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\setlength{\parindent}{0cm}
\usepackage{xtab,array}
\newcounter{rowno}
\textheight=4in %% just for demo
\begin{document}
\twocolumn
\newcommand\clause[1]{{%
\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\textbf{#1}%
\parfillskip=0pt \finalhyphendemerits=0 \par}}
\section{Traktate}
\subsection{Ad Demetrianum}
\setcounter{rowno}{-1}
\begin{xtabular}{>{\stepcounter{rowno}\therowno.}rp{0.8\linewidth}}
&\textbf{1} Oblatrantem te \\
% Most verses are short.
&et aduersus Deum \\
& qui unus et uerus est
\clause{T2gdz}\\
& ore sacrilego
\clause{Tg}\\
& et uerbis impiis \\
& obstrepentem frequenter,
\clause{Pg} \\
& Demetriane, \\
& contempseram \\
& uerecundius et melius existimans \\
& errantis inperitiam silentio spernere
\clause{T2d} \\
& quam loquendo dementis insaniam prouocare.
\clause{V3d} \\
& Nec hoc sine magisterii diuini auctoritate faciebam,
\clause{TT12g} \\
& cum scriptum sit: \\
% Many verses span multiple lines, a few are very long.
& In aures inprudentis noli quicquam dicere, ne quando audierit inrideat sensatos sermones tuos, [Prou. 23, 9]
\clause{bib}
\end{xtabular}
\end{document}