通过最小工作示例描述问题
我在文件中保存了以下 LaTeX 代码~/Test.tex
。
\documentclass{article}
\usepackage[hmarginratio=1:4]{geometry}
\usepackage[bidi=basic,hebrew,provide=*]{babel}
\usepackage{marginnote}
\makeatletter
\newif\if@RTL \@RTLtrue
\makeatother
\begin{document}
\[
x + y = z\marginnote{Hello, world!}
\]
\end{document}
该代码创建一个类的文档article
,并调整文章左右边距的相对宽度。然后,它通过包将希伯来语设置为文档的主要语言和唯一语言babel
。然后,在加载marginnote
包后,它实现哈维尔·贝佐斯建议的破解方法解决此marginnote
包与 管理的希伯来语文档交互时出现的问题babel
。然后,在文档正文中,以显示模式写入一个方程式,其中嵌入了边注。
然后我在终端中执行了以下命令。
> cd ~
> lualatex Test
> lualatex Test
编译成功完成,没有警告~/Test.log
;特别是,没有警告建议重新运行lualatex
。编译的结果~/Test.pdf
是创建了文件。在 PDF 查看器中打开时,文件显示如下。(我仅截取了显示的相关部分。)
可以看出,该页面上没有任何边注。
问题
- 为何没有打印出边注?
- 我该怎么做才能让边注出现,同时又不放弃构成序言的元素:
geometry
调整边注的软件包、babel
以希伯来语为主要语言的软件包以及 Javier Bezos 的 hack。(实际上,hack 是可以取消的,只要用另一种解决方案代替即可这个问题,但我更希望能够保留贝佐斯的优雅风格。)
答案1
问题 1
边注实际上已被打印出来,但是,由于边注是在数学模式中排版的,字距调整的方向(该包marginnote
严重依赖该方向)与数学模式外的方向相反,这使得边注与页面的右边距齐平(由于包的计算错误,预期的字距调整应该在右侧进行)。
你可以通过将边注向左移动来观察
\documentclass{article}
\usepackage[hmarginratio=1:4]{geometry}
\usepackage[bidi=basic,hebrew,provide=*]{babel}
\usepackage{marginnote}
\makeatletter
\newif\if@RTL \@RTLtrue
\makeatother
\begin{document}
\[
x + y = z\marginnote{Hello, world!}\cos (2\theta) = \cos^2 \theta - \sin^2 \theta
\]
\end{document}
问题2
您可以通过进入受限水平模式(通过)退出数学模式,并恢复和\hbox
的方向(在数学模式内已更改)\pardir
\textdir
\documentclass{article}
\usepackage[hmarginratio=1:4,showframe]{geometry}
\usepackage[bidi=basic,hebrew,provide=*]{babel}
\usepackage{marginnote}
\makeatletter
\newif\if@RTL \@RTLtrue
\makeatother
\begin{document}
\[
x + y = z\hbox{\pardir TRT \textdir TRT\marginnote{Hello, world!}}
\]
\end{document}
但最好使用\hboxR
from luabidi
,它的作用基本相同,但更强大
\documentclass{article}
\usepackage[hmarginratio=1:4,showframe]{geometry}
\usepackage[bidi=basic,hebrew,provide=*]{babel}
\usepackage{marginnote}
\usepackage{luabidi}
\makeatletter
\@RTLtrue % luabidi already defines this conditional
\makeatother
\begin{document}
\[
x + y = z\hboxR{\marginnote{Hello, world!}}
\]
\end{document}