语言文本中的行号

语言文本中的行号

我正在排版古典文学中的一段文字。其中一部分由编号的诗句组成。对于每一行诗句,我想显示 (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}

在此处输入图片描述

相关内容