• R语言软件开源
  • R Markdown 文档代码块中包含带双引号中文字符生成 PDF 文档问题

问题描述

R Markdown 文档中,如果代码块中包含带双引号中文字符,那么生成的 PDF 文档的代码块中带双引号的中文字符前面多了一个空格,如" 张三",而不是预期想要的"张三"。

我的代码

---
title: "代码块含有带双引号的中文字符测试"
output:
  pdf_document: 
    latex_engine: xelatex
header-includes:
  - \usepackage{ctex}
---

```{r}
name = c("张三", '李四')
name
```

系统环境

xfun::session_info()
#> R version 4.3.3 (2024-02-29)
#> Platform: x86_64-pc-linux-gnu (64-bit)
#> Running under: Manjaro Linux
#> 
#> Locale:
#>   LC_CTYPE=zh_CN.UTF-8       LC_NUMERIC=C              
#>   LC_TIME=zh_CN.UTF-8        LC_COLLATE=zh_CN.UTF-8    
#>   LC_MONETARY=zh_CN.UTF-8    LC_MESSAGES=zh_CN.UTF-8   
#>   LC_PAPER=zh_CN.UTF-8       LC_NAME=C                 
#>   LC_ADDRESS=C               LC_TELEPHONE=C            
#>   LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=C       
#> 
#> Package version:
#>   base64enc_0.1.3   bslib_0.6.1       cachem_1.0.8      callr_3.7.5      
#>   cli_3.6.2         clipr_0.8.0       compiler_4.3.3    digest_0.6.34    
#>   ellipsis_0.3.2    evaluate_0.23     fastmap_1.1.1     fontawesome_0.5.2
#>   fs_1.6.3          glue_1.7.0        graphics_4.3.3    grDevices_4.3.3  
#>   highr_0.10        htmltools_0.5.7   jquerylib_0.1.4   jsonlite_1.8.8   
#>   knitr_1.45        lifecycle_1.0.4   magrittr_2.0.3    memoise_2.0.1    
#>   methods_4.3.3     mime_0.12         processx_3.8.3    ps_1.7.6         
#>   purrr_1.0.2       R.cache_0.16.0    R.methodsS3_1.8.2 R.oo_1.26.0      
#>   R.utils_2.12.3    R6_2.5.1          rappdirs_0.3.3    reprex_2.1.0     
#>   rlang_1.1.3       rmarkdown_2.26    rprojroot_2.0.4   rstudioapi_0.15.0
#>   sass_0.4.8        stats_4.3.3       styler_1.10.2     tinytex_0.49     
#>   tools_4.3.3       utils_4.3.3       vctrs_0.6.5       withr_3.0.0      
#>   xfun_0.42         yaml_2.3.8

<sup>Created on 2024-03-14 with reprex v2.1.0</sup>

    yihui 一开始我简单搜了写论坛,没搜到湘云这篇帖子,我当时还在纳闷,这个问题怎么从来没有人报告呢,果断报告下。

    你给的答案确有奇效,问题已解决,谢谢你。但是我有个小小的疑问:湘云那个例子中用的是英文单引号,编译后会出问题(从你们在 GitHub 上的对话来看,当时采用双引号应该也是有问题的),可到我这里,在没有加入那行代码前,用英文单引号是正常的,用英文双引号确不正常。

      chuxinyuan 湘云那个例子中用的是英文单引号,编译后会出问题(从你们在 GitHub 上的对话来看,当时采用双引号应该也是有问题的),可到我这里,在没有加入那行代码前,用英文单引号是正常的,用英文双引号确不正常。

      这个超出我的能力范围了,我也不知道为什么。

      yihui 刚才又认真看了下加入你给的代码输出后的 PDF 文档,发现看上去貌似是解决问题了(美观了些),但是实际上只是原来的空格变窄了,另外引入了更多窄空格,复制到 RStudio 里露馅了。目前最优的解决方案是代码里的中文字符不要用英文双引号,用英文单引号,至少代码块的空格正常了。