使用从右到左的语言输入多列

使用从右到左的语言输入多列

我想在多列中输入波斯语(这种语言从右到左)。如何从第一列开始向右输入内容?

答案1

如果我理解正确的话,您说的是,您将bidipackage 与multicolpackage 一起使用,并且生成的内容的顺序\tableofcontents是错误的。以下是显示该问题的示例:

\documentclass{article}
\usepackage{multicol}
\usepackage{bidi}
\setRTL
\begin{document}
\tableofcontents
\begin{multicols}{2}
\section{First}
\columnbreak
\section{Second}
\end{multicols}
\end{document}

正如您在 PDF 输出中看到的,列按 RTL 排序;但是目录中的顺序显然是错误的。这是一个已知错误。发生这种情况的原因是,当页码已知时,\write没有在页面发货时写入条目的延迟。\immediate

使用twocolumn选项后,这个问题就不会发生(我应该说明这个问题在早期版本的bidi包中存在),因为bidi欺骗了 TeX,所以内容的顺序是正确的;尝试:

\documentclass[twocolumn]{article}
\usepackage{bidi}
\setRTL
\begin{document}
\tableofcontents
\section{First}
\newpage
\section{Second}
\end{document}

我可以修复这个问题,但不幸的是,这不太可能发生,因为它bidi已经是最终版本(版本 12),并且不会再进行开发。我也不确定是否有可能修复这个问题的解决方法。

答案2

对于整个文档中的双列模式,不同的答案给出了一个好的方法(除非您还需要平衡)。

对于超过 2 列或需要平衡列数据时,答案应该可以使用该multicol包。但是,正如 Vafa Khalighi 所演示的那样,这会导致目录条目的排序不正确。

造成这种情况的原因是multicol文件中进行了不正确的修补multicol-xetex-bidi.def。尝试将列从默认列反转

 hbox ( vbox-col-1 rule vbox-col-2 rule ... rule vbox-col-n )

 hbox ( vbox-col-n rule vbox-col-n-1 rule ... rule vbox-col-1 )

尽管这看起来合乎逻辑,但它是错误的,因为在这种情况下,vbox-col-n当 TeX 执行 as\shipout和 this any时,它\write首先看到最后一列,因此这将是它们在目录中显示的顺序。

因此,正确的实现方式更加复杂:我们需要让 take 可见,vbox-col-1即使它位于页面的右边缘。因此,抽象地讲,此代码确实

 hbox ( hskip to right margin
        hskip - columnwidth
        vbox-col-1 
        hskip - columnwidth
        hskip - columnsep            % or even a little more magic for rules
        hskip - columnwidth 
        vbox-col-2  ...  vbox-col-n )

前段时间,我实现了对 RL 排版的支持,但犯了完全相同的错误 :-( 并且该版本仍然在 CTAN 上。

具有正确 RL 支持的版本是 v1.8a 或更高版本,目前可以从SVN 源(您仍然必须通过运行来解压它tools.ins,因此不太方便)。我希望在不久的将来改变这种情况,因为我目前正在对源代码进行一些其他更新。

使用该版本,文件multicol-xetex-bidi.def可以大大缩短为仅包含以下行:

\RLmulticolcolumns

它无条件地反转多列(但不反转其他内容)。或者将文件保持为完全空白,然后像\setRTL在文档中一样使用该命令。

也许有人还想将脚注规则向右移动(bidi 似乎没有这样做,但是xepersian确实如此,因此应谨慎使用):

\renewcommand \footnoterule{%
    \kern-3pt\hbox to\textwidth{\hskip .6\textwidth\hrulefill }%
    \kern2.6pt}

通过上述更改来撤消 bidi 的补丁(以及新版本的 multicol),我们得到了所需的输出。

xepersianVahid Damanafshan 在回答中使用的包在内部也使用了包,因此bidi也会受到不正确补丁的影响multicols。但是通过上面建议的更改,我们得到了非常好的输出(并不是说我会说这种语言,但至少我能够识别目录中的数字,并且它们会正确显示出来;很抱歉脚注是独立的,只是想看看会发生什么):

\documentclass{article}

\usepackage{multicol}

\usepackage{ptext}
\usepackage{xepersian}

\begin{document}
\tableofcontents
\begin{multicols}{3}
  \section{بخش اول}
  \ptext[1-2]\footnote{\ptext[3]}
  \section{بخش اول}
  \ptext[4]
\end{multicols}
\end{document}

结果我们得到:

在此处输入图片描述

答案3

如果我理解正确,请尝试以下代码:

\documentclass[twocolumn]{article}
\usepackage{ptext} 
\usepackage{xepersian}
\begin{document}
\section{بخش اول}
\ptext[1-3]
\section{بخش دوم}
\ptext[1-3]
\end{document}

输出为: 在此处输入图片描述

相关内容