Предположим, у меня есть файл .Rmd, как показано ниже:
---
title: "Untitled"
output:
officedown::rdocx_document:
default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
md5-4caffc4710057148fdad652000287a10
# Chapter1 {#ch1}
# Chapter2 {#ch2}
Refer to \@ref(ch1).
Когда \@ref (ch1) окружен многобайтовыми строками (например, китайскими иероглифами), могут возникнуть ошибки.
Чистый мультибайт + ссылка
上下\@ref(ch1)
Смешанный многобайтовый/однобайтовый + ссылка
上a下\@ref(ch1)
ссылка + мультибайт
\@ref(ch1)。
Ошибка в nchar(u, itype): недопустимая многобайтовая строка, элемент 1
Звонки:... regmatches<- -> regmatches -> Map -> mapply ->
Не могли бы вы разобраться в этом вопросе? Спасибо.
информация о сеансе()
R версия 4.0.2 (2020-06-22)
Платформа: x86_64-w64-mingw32/x64 (64-разрядная версия)
Работает под: Windows 10 x64 (сборка 20180)
Матричные продукты: по умолчанию
локаль:
[1] LC_COLLATE=Китайский (упрощенный)_Китай.936
[2] LC_CTYPE=Китайский (упрощенный)_Китай.936
[3] LC_MONETARY=Китайский (упрощенный)_Китай.936
[4] LC_NUMERIC=С
[5] LC_TIME=Китайский (упрощенный)_Китай.936
прилагаемые базовые пакеты:
[1] Графика статистики grDevices использует методы наборов данных
[7] база
другие прилагаемые пакеты:
[1] Officer_0.3.12 officedown_0.2.0 flextable_0.5.10
[4] ggplot2_3.3.2 tidyr_1.1.1 knitr_1.29
[7] dplyr_1.0.2 сетчатый_1.16
загружается через пространство имен (и не прикрепляется):
[1] Rcpp_1.0.5решетка_0.20-41красивыеединицы_1.1.1
[4] sysfonts_0.8.1 ps_1.3.4 utf8_1.1.4
[7] rprojroot_1.3-2 assertthat_0.2.1 дайджест_0.6.25
[10] R6_2.4.1 бэкпорты_1.1.9 оценка_0.14
[13] столб_1.4.6 gdtools_0.2.2 rlang_0.4.7
[16] curl_4.3 uuid_0.1-4 data.table_1.13.0
[19] callr_3.4.3 Matrix_1.2-18 rmarkdown_2.3
[22] desc_1.2.0 labeling_0.3 devtools_2.3.1
[25] stringr_1.4.0 munsell_0.5.0 tinytex_0.25
[28] компилятор_4.0.2 xfun_0.16 pkgconfig_2.0.3
[31] systemfonts_0.2.3 base64enc_0.1-3 pkgbuild_1.1.0
[34] rvg_0.2.5 htmltools_0.5.0 tidyselect_1.1.0
[37] tibble_3.0.3 bookdown_0.20 fansi_0.4.1
[40] crayon_1.3.4 showtextdb_3.0 withr_2.2.0
[43] grid_4.0.2 jsonlite_1.7.0 gtable_0.3.0
[46] жизненный цикл_0.2.0 магриттр_1.5 весы_1.1.1
[49] zip_2.1.0 cli_2.0.2 stringi_1.4.6
[52] farver_2.0.3 fs_1.5.0 remotes_2.2.0
[55] testthat_2.3.2 xml2_1.3.2 многоточие_0.3.1
[58] generics_0.0.2 vctrs_0.3.2 tools_4.0.2
[61] showtext_0.9 клей_1.4.1 муррр_0.3.4
[64] processx_3.4.3 pkgload_1.1.0 yaml_2.2.1
[67] colorspace_1.4-1 sessioninfo_1.1.1 memoise_1.1.0
[70] использовать это_1.6.1
```````
Название: "Без названия"
вывод:
officedown::rdocx_document:
{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
См. @ref (ch1).
Когда @ref (ch1) окружен многобайтовыми строками (например, китайскими иероглифами), могут возникнуть ошибки.
Ваша проблема связана с тем, что вы не работаете с файлом в кодировке UTF-8.
R, R Markdown и Windows плохо работают, если кодировка не UTF-8.
Да, @davidgohel , ты прав. Хотя файл .Rmd находится в кодировке UTF-8, ОС работает в кодировке GBK. Когда я перехожу на bookdown::word_document2
, движку Knitr удается скомпилировать файл. Но я все еще получаю ?? где должна появиться закладка.
Вам не нужно пробовать новые функции формата вывода.
Показанный ниже результат получен в Windows с французским языком. Но я убедился, что файл был закодирован как UTF-8 (я использую readr::guess_encoding()
, если кодировка не UTF-8, я могу изменить ее на UTF8 с помощью fpeek::peek_iconv()
).
Не могли бы вы показать результат
readr::guess_encoding("your/rmd/file")
Результаты
нет | кодирование | уверенность
---|-------------|-----------:
1 | UTF-8 | 1
2 | окна-1252 | 0,28
Привет @madlogos ,
Я также являюсь китайским пользователем. Проблема многобайтности меня тоже давно беспокоила. Вот мой трюк для этого:
@ref
как обычно;readr::read_lines
его;"\\\\@ref\\([^\\)]+\\)"
;"\\\\@ref\\([^\\)]+\\)"
в одной строке;Например, 请参考表\@ref(tab: coco)中的数据
следует разделить как
[строка 1] 请参考表
[строка 2] \@ref(tab: coco)
[строка 3] 中的数据
Ну, я не уверен, что это эффективное решение, но оно работает для меня. 😄
@bishun945 спасибо за обращение. Хорошая вещь.
@madlogos Я пробовал другое решение: просто переключите вашу систему и язык MS Word на английский.