在双列环境中,我需要
- 按列编号和
- 获取实际列号的可能性。
现在,可以使用lineno
和选项进行按列行编号columnwise
。
我可以使用选项和命令获取multicols
环境中的实际列号。multicol
colaction
\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}