因此,我创建了一个Rmarkdown文件来生成pdf输出.主要语言是英语,但我在生成的Eschrame中有一些阿拉伯语单词,然后我推出使用kableExtra作为表格.

问题是,我的阿拉伯语文本没有像他们应该的那样连接在一起,并被呈现为单独的字母(即这个单词").

output of a sample table

当我将默认语言设置为阿拉伯语时,单词看起来很完美,但是整个文档包括表格和英语单词从右到左,这使得它看起来完全不正常.我不能真正应用herehere中提到的这些解决方案,因为我不能将它们应用到我的gramrame/table输出中.有没有办法解决这个问题?

下面是我的. rmd文档开头的YAML代码

---
output: 
  pdf_document:
    latex_engine: xelatex
geometry: margin=1.7cm
params:
  branch: ""
  month: "March"
  year: "2024"
header-includes:
- \usepackage{fontspec}
- \setmainfont{Amiri}
- \usepackage{pdflscape}
- \newcommand{\blandscape}{\begin{landscape}}
- \newcommand{\elandscape}{\end{landscape}}
---

# Quantity Sold
``{r}
library(tidyverse)
library(readxl)
library(openxlsx)
library(tinytex)

mt <- data.frame(Product = c("متين GERMA-C2TE","لاصق GERMA-Glue","لاصق GERMA-C1","Alumacer/ 000CRU3 - CRUCETAS PVC 3 mm (300/كيس)"),
                 mpg = c(1,5,14,2),
                 cyl = c(20,54,67,83),
                 hp = c(130,200,201,145))
  
final_kable <- mt %>% knitr::kable("latex", booktabs = T, longtable = T, align = c("l","r","r","r"), col.names = c("Cars","mpg","cyl","hp")) %>%
  
  kableExtra::kable_styling(latex_options = c("scale_down"),position = "left", full_width = F) %>%
  kableExtra::kable_styling(font_size = 9) %>%
  
  kableExtra::pack_rows(group_label = "الكل / الستيلات", start_row = 1, end_row = 2) %>%
  kableExtra::pack_rows(group_label = "الكل / تيكا", start_row = 3, end_row = 4)

final_kable
``

我也试过添加多语种包,但没有效果,因为应该看起来像这个词的单词"

---
output: 
  pdf_document:
    latex_engine: xelatex
geometry: margin=1.7cm
params:
  branch: ""
  month: "March"
  year: "2024"
header-includes:
- \usepackage{pdflscape}
- \newcommand{\blandscape}{\begin{landscape}}
- \newcommand{\elandscape}{\end{landscape}}
- \usepackage{longtable}
- \usepackage{hyperref}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{fontspec}
- \setmainfont{Amiri}
- \usepackage{polyglossia}
- \setdefaultlanguage{english}
- \setotherlanguages{arabic}
---
# Quantity Sold
``{r}
library(tidyverse)
library(readxl)
library(openxlsx)
library(tinytex)

mt <- data.frame(Product = c("متين GERMA-C2TE","لاصق GERMA-Glue","لاصق GERMA-C1","Alumacer/ 000CRU3 - CRUCETAS PVC 3 mm (300/كيس)"),
                 mpg = c(1,5,14,2),
                 cyl = c(20,54,67,83),
                 hp = c(130,200,201,145))
  
final_kable <- mt %>% knitr::kable("latex", booktabs = T, longtable = T, align = c("l","r","r","r"), col.names = c("Cars","mpg","cyl","hp")) %>%
  
  kableExtra::kable_styling(latex_options = c("scale_down"),position = "left", full_width = F) %>%
  kableExtra::kable_styling(font_size = 9) %>%
  
  kableExtra::pack_rows(group_label = "الكل / الستيلات", start_row = 1, end_row = 2) %>%
  kableExtra::pack_rows(group_label = "الكل / تيكا", start_row = 3, end_row = 4)

final_kable
``

推荐答案

您可以使用LaTeX包ucharclasses来根据Unicode代码块在不同字体之间自动切换(或者在本例中是相同的字体,但激活了不同的脚本):

---
output: 
  pdf_document:
    latex_engine: xelatex
header-includes:
- \usepackage{longtable}
- \usepackage{booktabs}
- \usepackage{hyperref}
- \usepackage{fontspec}
- \newfontfamily{\defaultfont}{Amiri}
- \newfontfamily{\latinfont}{Amiri}
- \newfontfamily{\arabicfont}[Script=Arabic]{Amiri}
- \usepackage[Latin, Arabic]{ucharclasses}
- \setDefaultTransitions{\defaultfont}{}
- \setTransitionsForLatin{\latinfont}{}
- \setTransitionsForArabics{\arabicfont}{}
---
# Quantity Sold

```{r}
library(tidyverse)

mt <- data.frame(Product = c("متين GERMA-C2TE","لاصق GERMA-Glue","لاصق GERMA-C1","Alumacer/ 000CRU3 - CRUCETAS PVC 3 mm (300/كيس )"),
                 mpg = c(1,5,14,2),
                 cyl = c(20,54,67,83),
                 hp = c(130,200,201,145))
  
final_kable <- mt %>% knitr::kable("latex", booktabs = T, longtable = T, align = c("l","r","r","r"), col.names = c("Cars","mpg","cyl","hp")) %>%
  
  kableExtra::kable_styling(latex_options = c("scale_down"),position = "left", full_width = F) %>%
  kableExtra::kable_styling(font_size = 9) %>%
  
  kableExtra::pack_rows(group_label = "الكل / الستيلات", start_row = 1, end_row = 2) %>%
  kableExtra::pack_rows(group_label = "الكل / تيكا", start_row = 3, end_row = 4)

final_kable
```

结果:

output table from above code

注意,我在右括号前引入了一个空格.否则,它将被视为阿拉伯语RTL文本的端口.在包含的源代码中,人们可以看到与引号相同的效果.最好是插入U +200B ZERO WIDTH SPACE.

R相关问答推荐

如何在R中正确对齐放射状图中的文本

从API中抓取R数据SON

在边界外添加注释或标题

如何根据条件计算时差(天)

用derrr在R中查找组间的重复项

如何得到R中唯一的组合群?

如何读取CSV的特定列时,给定标题作为向量

R如何计算现有行的总和以添加新的数据行

基于Key->Value数据帧的基因子集相关性提取

如何从向量构造一系列双边公式

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

Geom_arcbar()中出错:找不到函数";geom_arcbar";

如何提取R中其他字符串和数字之间的字符串?

R -基线图-图形周围的阴影区域

如何阻止围堵地理密度图?

数据集上的R循环和存储模型系数

抽样变换-REXP与RWEIBUR

使用同一行中的前一个值填充R矩阵中的缺失值

在子图内和子图之间对齐行数不均匀的表格罗布对

如何修复geom_rect中的层错误?