在双列环境中按列进行行编号(使用多列)

在双列环境中按列进行行编号(使用多列)

在双列环境中,我需要

  • 按列编号和
  • 获取实际列号的可能性。

现在,可以使用lineno和选项进行按列行编号columnwise

我可以使用选项和命令获取multicols环境中的实际列号。multicolcolaction\docolaction

但不幸的是,按列编号似乎在环境中不起作用multicols。那么我该如何实现我想要的呢?

(实际上,我想创建对列的引用,但如果我能得到实际的列号,我就会很高兴了。)

您可以考虑以下示例:

\documentclass[a4paper,fontsize=12pt,DIV=14]{scrartcl}
\usepackage{xltxtra}

\usepackage[columnwise,modulo]{lineno} 

\usepackage[colaction]{multicol}

\newcommand\showcolumn{%
\docolaction{1}{}{2}%
}

\setlength{\columnsep}{1cm}

\newcommand\Test{THIS IS COLUMN \showcolumn{}. }

\usepackage{lipsum}

\begin{document}
%% \twocolumn
\begin{multicols}{2}
\linenumbers

\lipsum*[1]
\Test
\lipsum*[1-2]
\Test
\lipsum*[1]

\end{multicols}
\end{document}

结果,行号不是按列编号的。当删除 multicols 环境并改用 命令\twocolumn时,行号是按列编号的,但我无法使用\docolaction。那么该怎么办?

答案1

在 中按列编号lineno与 不兼容multicol。问题是 会lineno在生成每行时将其编号附加到每行,然后multicol在输出页面时将所有行放入列中。因此,在生成行号时, 和 都无法lineno知道multicol每行最终会落在哪一列。

如果您使用双列模式,则可以通过检查引用点处的 x 值来确定您所在的列。由于您的最终目标似乎是创建列/行引用,因此我使用生成zref-savepos[列].[行] 形式的引用的简单解决方案。它只是假设如果我们在页面的左半部分,则我们在第一列,否则在第二列,但它应该很容易适应您的特定需求。它至少需要两次运行才能获得正确的值。

\documentclass[twocolumn,a4paper,fontsize=12pt,DIV=14]{scrartcl}
\usepackage[columnwise,modulo]{lineno} 
\usepackage{zref-savepos}
\usepackage{lipsum}

\setlength{\columnsep}{1cm}
\newlength{\midpage}
\setlength{\midpage}{.5\paperwidth}
\newcommand\labelcolumnline[1]{%
  \zsavepos{#1}%
  \linelabel{#1}%
}

\newcommand\refcolumnline[1]{%
  \ifnum\number\zposx{#1}>\number\midpage\relax 2\else 1\fi%
  .\ref{#1}%
}

\begin{document}
\linenumbers

\lipsum*[1]\labelcolumnline{r1}

\lipsum*[1-2]\labelcolumnline{r2}

\lipsum*[1]

The first paragraph ends at \refcolumnline{r1}.

The third paragraph ends at \refcolumnline{r2}.
\end{document}

在此处输入图片描述

相关内容