我想在多列中输入波斯语(这种语言从右到左)。如何从第一列开始向右输入内容?
答案1
如果我理解正确的话,您说的是,您将bidi
package 与multicol
package 一起使用,并且生成的内容的顺序\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),我们得到了所需的输出。
xepersian
Vahid 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}
输出为: