r语言 - 双语 Rmarkdown 的自动对齐文本 - > LaTeX 文档



已更新。请参见下文

我正在写一份双语报告。即使用阿拉伯语和英语。使用xelatex引擎、mainfont: Ariallang: arYAML元数据,文档可以平滑地呈现阿拉伯语和英语(经过一番努力(。

如何在Rmarkdown中自动对齐文本->LaTeX文档

问题是:在lang变量中选择的语言是从右到左对齐的,因此整个文档都遵循这种对齐方式。每当我想插入英语段落时,我都必须使用[text]{dir="ltr"}。有没有一种方法可以根据使用的语言自动对齐段落?有LaTeX套餐或Pandoc/Rmarkdown的诀窍吗?Preambable中的纯LaTeX?

附录-reprex(旧(

如果您需要它,下面的代码就是您重现问题所需要的。

---
output:
pdf_document:
latex_engine: xelatex
mainfont: Arial
lang: ar
---
بسم الله الرحمن الرحيم
This text is mis-aligned in rendered document.
[This text is well-aligned in rendered document.]{dir="ltr"}

更新

以下更新包含@tarleb友好提供的Lua过滤器。

底线是:

  • 在使用Lua过滤器之前,阿拉伯语文本的方向和对齐方式正确,英语文本的方向(rtl(和对齐方式(rigth-aligned(错误。在此处查看不带过滤器的渲染PDF
  • @tarleb提出的过滤器旨在检测英文文本段落,并自动将其方向设置为从左到右
  • 由此产生的文档是,所有文本,无论是阿拉伯语还是英语,都是从左到右的方向,并与页面的左边框对齐。请在此处查看生成的PDF

我认为这种不便是因为Lua过滤器不能只检测拉丁/英语字符,它不能区分阿拉伯语和英语字符。拉丁字符与非拉丁字符,因此过滤器只将文档中每个段落的方向设置为从左到右。

因此,所发生的事情是,lang: ar属性的效果被Lua过滤器完全颠倒了,我们也有同样的问题,但现在使用的是阿拉伯语而不是英语。

此外,段落的对齐似乎遵循了文本的方向;如果文档文本方向为ltr,则所有段落都与左边框对齐,反之亦然。我不确定这是真的。我的问题是,我们如何分别为每个段落设置文本方向和文档对齐方式?我们可以使用Lua过滤器来检测段落中的第一个字符是拉丁字符还是非拉丁字符,并相应地设置该段落的文本方向和对齐方式,例如ltr方向和左对齐(如果是拉丁字符(,rtl方向和右对齐(如果不是拉丁字符(吗?

非常感谢。

更新reprex

---
output:
pdf_document:
latex_engine: xelatex
pandoc_args: '--lua-filter=ltr-paras.lua'
mainfont: Arial
lang: ar
---
بسم الله الرحمن الرحيم
Thanks to the Lua filter from **@tarleb**, the English text is well-aligned in rendered document without having to wrap it in {dir=ltr}. The text direction is left-to-right and the paragraph itself is aligned to the left border of the page. 
To get the Arabic text direction right, I have to wrap it inside {dir=rtl}:
[بسم الله الرحمن الرحيم]{dir="rtl"}
However, the Arabic paragraph is still aligned wrongfully to the left border of the page.

这对pandoc-Lua过滤器来说是一项不错的工作。我们使用过滤器来检查段落中的所有字符是否都是数字、拉丁字母、标点符号或空白。如果是这种情况,那么我们将段落包装在具有属性dir='ltr'的div中(也可以使用lang='en'(。

function Para (para)
local str = pandoc.utils.stringify(para)
if str:match '^[%w%p%s]*$' then
return pandoc.Div(para, pandoc.Attr('', {}, {dir='ltr'}))
end
end

将以上内容放入文档目录中的一个文件中,例如ltr-paras.lua,然后将其添加到您的YAML:中

output:
pdf_document:
latex_engine: xelatex
pandoc_args: '--lua-filter=ltr-paras.lua'

最新更新