自动对齐双语 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 文档的文本 的相关文章

  • 更改 ggplot 条形图填充颜色

    有了这个数据 df lt data frame value c 20 50 90 group c 1 2 3 我可以得到一个条形图 df gt ggplot aes x group y value fill value geom col c
  • 有条件地将可选组替换为 gsub

    一位用户问我如何做到这一点如何使 ggplot 图例中的选定单词变为斜体 https stackoverflow com questions 76054997 how to italicize select words in a ggplo
  • 在 Bookdown 中呈现附录图号

    Bookdown 是一个很棒的软件包 我期待看到它如何发展 但现在我在渲染数字方面遇到了麻烦pdf document2附录中的数字时的格式 具体来说 当带有标题的图形位于附录中时 图形编号应采用 A 1 A 2 B 1 B 2 等形式 但图
  • 使用 gbuffer 在 R 中缓冲(地理)空间点

    我正在尝试缓冲数据集中半径为 100 公里的点 我正在使用该功能gBuffer从包装中rgeos 这是我到目前为止所拥有的 head sampledf postalcode lat lon city province 1 A0A0A0 47
  • 为 RStudio Server 1.0.44 配置日志目录

    我在 CentOS 7 上运行 RStudio Server 1 0 44 根据文档 https support rstudio com hc en us articles 200554766 RStudio Server Applicat
  • 在 R 中使用 gamlss::lms 选择百分位数曲线

    我正在使用 gamlss 包中的示例代码来绘制百分位数曲线 library gamlss data abdom lms y x data abdom n cyc 30 它正在绘制自己的一组百分位数曲线 如何选择只绘制第 10 50 和 90
  • 在knitr中打印漂亮的交叉表

    我想要的是使用 R Markdown 和 knit 从 RStudio 打印漂亮的交叉表 无论是在 pdf 文件中 还是在 html 文件中 我怀疑我错过了一些非常明显的东西 因为我不敢相信这是如此困难 我使用 xtabs 或 ftable
  • 使用列表中的数据框:删除变量,添加新变量

    定义一个列表dats有两个数据框 df1 and df2 dats lt list df1 data frame a sample 1 3 b sample 11 13 df2 data frame a sample 1 3 b sampl
  • 适用于 Droid 手机的数学或 LaTeX 引擎 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Android 手机有可用的数学或 LaTeX 引擎吗 我最喜欢的抽认卡应用程序 AnyMemo 似乎
  • 从 Cox PH 模型预测概率

    我正在尝试使用 cox 模型来预测时间 称为停止 3 后失败的概率 bladder1 lt bladder bladder enum lt 5 coxmodel coxph Surv stop event rx size number cl
  • 用于更改向量中元素顺序的闪亮小部件

    在很多网站上 您都有一个拖放界面来更改列表中元素的顺序 我正在寻找类似的东西闪亮 我希望用户能够拖放列表中的元素 通过更改顺序来更改优先级 现在我有一个滥用的解决方案selectizeInput 这是可行的 但当选择列表变得更大时 它很快就
  • R markdown 引文标识符

    R markdown 允许使用 YAML 元数据部分中的参考书目元数据字段指定参考书目文件 例如 title Sample Document output html document bibliography bibliography bi
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • 在多面图中用 N 注释 x 轴

    我正在尝试生成一些按治疗条件和访问次数细分的数字结果的箱线图 每个框中的观察次数都放在图下方 并且也标记了访问次数 这里有一些虚假数据可以用来说明 我举了两个我尝试过但不太有效的例子 library ggplot2 library plyr
  • 为 ggplot 定义新的尺度轴变换

    我正在尝试创建一个squared使用 y 轴变换scales trans new但遇到错误 MWE data data frame x 1 10 y runif 10 z rnorm 10 10 library ggplot2 ggplot
  • 自动将变量名称添加到列表的元素[重复]

    这个问题在这里已经有答案了 我有一个模型列表 为了使代码更易于维护 因此可以方便地添加和删除模型 我希望有一个地方来存储它们及其名称 为此 我必须解决以下命名问题 上游 我生成模型的方式比以下方式效率低 如果是这样压缩的 我会assign他
  • 如何用月份的全名替换数字月份

    使用 tidyverse 包将月份的列更改为完整的实际月份名称 请记住 尽管这些数据只有四个月 但我的真实数据集包含一年中的所有实际月份 我是 tidyverse 的新手 mydata lt tibble camp c Platinum 2
  • 为格子中的每个面板添加不同的独特标签

    很清楚如何在格子中标记面板 https stackoverflow com questions 8508269 how to label panels in lattice using panel text or ltext论据 但是 如果
  • 当我用一个观察值运行回归时,为什么“fastLm()”会返回结果?

    为什么fastLm 当我用一项观察进行回归时返回结果吗 下面为什么不lm and fastLm 结果相等吗 library Rcpp library RcppArmadillo library data table set seed 1 D
  • R 编程中的字符串分割

    目前 下面的脚本将组合的项目代码拆分为特定的项目代码 rule2 lt c MR df 1 lt test grep paste rule2 sep collapse test Name y SpaceName 1 lt function

随机推荐