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

2024-02-03

更新。见下文。

我正在写一份双语报告。即使用阿拉伯语和英语。使用xelatex引擎,mainfont: Arial and lang: arYAML 元数据,该文档可以顺利渲染阿拉伯语和英语(经过一段时间后)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: arLua 过滤器完全颠倒了属性,我们也有同样的问题,但现在使用阿拉伯语而不是英语。

此外,段落的对齐方式似乎遵循文本的方向;如果文档文本方向为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.


这对 pandoc 来说是一份不错的工作Lua过滤器 https://bookdown.org/yihui/rmarkdown-cookbook/lua-filters.html。我们使用过滤器检查段落中的所有字符是否都是数字、拉丁字母、标点符号或空格。如果是这种情况,那么我们将段落包装在带有属性的 div 中dir='ltr'(也可以使用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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动对齐双语 Rmarkdown -> LaTeX 文档的文本 的相关文章

  • R中添加水印

    我在用magickR中的库 我想在一些图片上添加水印 I used image annotate功能如下 img lt image read C Users Maydin Desktop manzara png image annotate
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • R 中具有稳健回归的异常值

    我正在使用lmrobR 中的函数使用robustbase用于稳健回归的库 我会把它用作 rob reg lt lmrob y 0 dat method MM control a1 当我想返回我使用的摘要时summary rob reg 稳健
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 是否可以通过扫描从控制台读取而不回显字符?

    这是一个示例函数 passwordEntry lt function cat Enter your password pwd lt scan n 1 what character quiet TRUE invisible pwd 并测试该功
  • kableExtra 中的 row_spec() 函数不会在 html 输出中创建水平线

    我想在 kableextra 表中的某一行下方添加一条水平线 row spec 函数的参数 hline after 应该在行下方添加水平线 row spec 文档 https www rdocumentation org packages
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • 在shiny中过滤传单地图数据

    我在用传单地图设置这个闪亮的东西时遇到了麻烦 我的原帖 https stackoverflow com questions 50111566 applying leaflet map bounds to filter data within
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • 将每列的值乘以 R 中另一个 data.frame 中的权重

    我有两个data frames df and weights 代码如下 df看起来像这样 id a b d EE f 1 this 0 23421153 0 02324956 0 5457353 0 73068586 0 5642554 2
  • 在 r 中的 group_by 之后建模后取消列表列的嵌套

    我想对所有组进行线性回归group by 将模型系数保存在列表列中 然后使用 unnest 扩展列表列 这里我用的是mtcars以数据集为例 注 我想用do here becausebroom tidy 不适用于所有型号 mtcars gt
  • 如何在 OSX 上安装 LaTeX .sty 文件?

    我设置了一个 LaTeX 项目 tex documents some file tex support todonotes sty where some file tex uses todonotes usepackage colorinl

随机推荐