更新。见下文。
我正在写一份双语报告。即使用阿拉伯语和英语。使用xelatex
引擎,mainfont: Arial
and lang: ar
YAML 元数据,该文档可以顺利渲染阿拉伯语和英语(经过一段时间后)hustle https://stackoverflow.com/questions/70309883/include-a-language-besides-english-in-a-rmarkdown-latex-document?noredirect=1#comment124331723_70309883).
如何在 Rmarkdown -> LaTeX 文档中自动对齐文本?
问题是:在中选择的语言lang
变量从右到左对齐,因此整个文档都遵循这种对齐方式。每当我想插入英文段落时,我必须使用[text]{dir="ltr"}
。有没有办法根据所使用的语言自动对齐段落?有 LaTeX 包或 Pandoc / Markdown 技巧可以做到这一点吗?序言中的纯乳胶?
附录 -reprex (old)
如果您需要的话,可以使用以下代码来重现该问题。
---
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"}
Update
以下更新将合并 @tarleb 提供的 Lua 过滤器。
底线是:
- 在使用Lua过滤器之前,阿拉伯文本的方向和对齐方式正确,英语文本的文本方向(rtl)和对齐方式(rightth-aligned)错误。查看没有过滤器的渲染 PDFhere https://drive.google.com/file/d/13RHqdzLF0d4OTO1SbJIbvry3w8poIL8X/view?usp=sharing
- @tarleb 提出的过滤器旨在检测英文文本段落并自动将其方向设置为从左到右。
- 生成的文档是所有文本,无论是阿拉伯语还是英语,都是从左到右的方向,并与页面的左边框对齐。查看生成的 PDFhere https://drive.google.com/file/d/1uUNt2aNtFRgM-3M8MkwWZgEVG_w0DY1u/view?usp=sharing
我相信这种不便是因为 Lua 过滤器不仅仅检测拉丁/英语字符,它不区分阿拉伯语和英语字符,又名。拉丁字符 VS 非拉丁字符,因此过滤器只是将文档中每个段落的方向设置为从左到右。
所以发生的事情是lang: ar
Lua 过滤器完全颠倒了属性,我们也有同样的问题,但现在使用阿拉伯语而不是英语。
此外,段落的对齐方式似乎遵循文本的方向;如果文档文本方向为ltr,则所有段落均向左边框对齐,反之亦然。我不确定这是真的。我的问题是如何分别设置每个段落的文本方向和对齐方式?我们可以使用 Lua 过滤器来检测段落中的第一个字符是否是拉丁语还是非拉丁语,并相应地设置该段落的文本方向和对齐方式,例如,如果是拉丁语,则为 ltr 方向和左对齐,如果为 rtl 方向和右对齐如果非拉丁语?
提前谢谢了。
Updated 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.