我们怎样才能在双列模式下交换列并保留超链接?

我们怎样才能在双列模式下交换列并保留超链接?

请节省您的时间和精力在这个问题上,有一些解决方案。

我一直在帮助将阿拉伯语-英语(从右到左排版)和英语-阿拉伯语(从左到右排版)索引排版在一个文档中,更多信息请参见使用 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)通过将命令包装\itemxindy级别。之后,可以决定是否将索引条目排版到右侧或左侧,甚至跳转到当前页面的其他位置(当移动和交换 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}

姆韦

相关内容