请节省您的时间和精力在这个问题上,有一些解决方案。
我一直在帮助将阿拉伯语-英语(从右到左排版)和英语-阿拉伯语(从左到右排版)索引排版在一个文档中,更多信息请参见使用 polyglossia 中的 multiind 包在从右到左和从左到右之间切换两列。如何重新排列列以使第一列在右侧,第二列在左侧,形成双列结构并保留可点击的交叉引用和索引页码?
我附上了一个基本方案,它可以在所有主要latex
引擎上运行。
% run: *latex mal-cols.tex
\documentclass[a4paper]{article}
\parindent=0pt
\newcount\maltemp
\usepackage{multicol}
\usepackage{kantlipsum}
\def\textbonus{{\normalsize\kant[1-5]}}
\begin{document}
\columnseprule=3pt
\Huge\bfseries% For better reading...
Regular page in one-column regime...
\newpage
\begin{multicols}{2}
\textbonus
\loop
\advance\maltemp by 1
\the\maltemp\par
\ifnum\maltemp<130\repeat
\end{multicols}
\end{document}
答案1
这问题以及它的答案可能会有所帮助(我没有详细研究它)。我很幸运问题因为 OP 根本不想在索引中显示索引页码,但如果她想显示,该怎么办?从技术上讲,我们排版的是小型术语词典,而不是两个独立的索引。
有建议使用flowfram
包和我的解决方案使用两个单独的文档,稍后再合并在一起。如果索引页码可点击,此解决方案将不起作用。如果我们使用\includepdf
(这是来自pdfpages
包)或\includegraphics
(这是来自graphicx
包裹)。
我正在考虑保存文档中的当前位置(\pdfsavepos
来自pdfTeX)通过将命令包装\item
在xindy
级别。之后,可以决定是否将索引条目排版到右侧或左侧,甚至跳转到当前页面的其他位置(当移动和交换 3+ 列时,这只是一种理论情况),例如通过使用命令\makebox
。这是可能的,但不是有效的。
我开始考虑按原样移动列。当我使用\oddsidemargin
,并\evensidemargin
最终通过\columnwidth
+移动时\columnsep
,它将左列移动到正确的位置。然后我改变了\columnsep
尺寸(右列移动到左列前面),我得到了一个解决方案,但还有一个问题:我们需要修复也被移动的页眉和页脚。这是可以做到的。我继续进行实验,并使用\leftskip
和\rightskip
代替\oddsidemargin
。我相信这是一个解决方案,但我还没有在实践中测试过。两列交换了,如果有超链接,它们就会起作用。
我附上了一个 5+5 页的示例和预览:5 页采用常见的两列模式(第一行图片),另外 5 页采用交换列模式(第二行图片)。
% run: *latex mal-columns.tex
\documentclass[a4paper]{article}
%\pagestyle{empty}
\parindent=0pt
\usepackage{multicol}
%\newdimen\oldoddsidemargin
%\oldoddsidemargin=\oddsidemargin
\newdimen\oldcolumnsep
\oldcolumnsep=\columnsep
\newcount\maltemp
\newdimen\dimtemp
\usepackage{kantlipsum}
\def\textbonus{{\normalsize\kant[1-5]}}
\columnseprule=3pt
\begin{document}
\Huge\bfseries % For better reading...
Regular page in one-column regime...
\newpage
%This is a common typesetting...
\begin{multicols}{2}
%\typeout{\the\columnwidth,\the\columnsep}%
\textbonus
\loop
\advance\maltemp by 1
\the\maltemp\par
\ifnum\maltemp<130\repeat
%\columnbreak
\end{multicols}
% Measuring dimensions...
\newpage
\begin{multicols}{2}
%\typeout{\the\columnwidth, \the\columnsep}%
% Working except the header+footer...
\dimtemp=\columnwidth
\advance\dimtemp by \columnsep
\global\leftskip=\dimtemp
\global\rightskip=\dimtemp
%\global\advance\oddsidemargin by \columnwidth
%\global\advance\oddsidemargin by \columnsep
\end{multicols}
% Columns reversed...
\columnsep=-2\textwidth
\advance\columnsep by -\oldcolumnsep
\maltemp=0
\begin{multicols}{2}
\textbonus
\loop
\advance\maltemp by 1
\the\maltemp\par
\ifnum\maltemp<130\repeat
\end{multicols}
% Return to normal typesetting...
\newpage
%\oddsidemargin=\oldoddsidemargin
\leftskip=0pt%
\rightskip=0pt%
Let's get back to typesetting in one-column regime\ldots
\end{document}