Officedown: Bookmark \@ref gagal berfungsi untuk string multibyte

Dibuat pada 27 Agu 2020  ·  7Komentar  ·  Sumber: davidgohel/officedown

Misalkan saya memiliki file .Rmd seperti di bawah ini:

---
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).

Ketika \@ref (ch1) dikelilingi oleh string multibyte (misalnya, karakter Cina), mungkin akan menemui kesalahan.

  • Multibyte murni + ref

    • Contoh: 上下\@ref(ch1)
    • Hasil: benar
  • Campuran multibyte/singlebyte + ref

    • Contoh: 上a下\@ref(ch1)
    • Hasil: salah (上a下@ref (ch1))
  • ref + multibyte

    • Contoh: \@ref(ch1)。
    • Hasil: kompilasi gagal


    Kesalahan dalam nchar(u, itype): string multibyte tidak valid, elemen 1

    Panggilan:... regmatches<- -> regmatches -> Peta -> mapply ->



Bisakah Anda melihat masalah ini? Terima kasih.


info sesi()

R versi 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Berjalan di bawah: Windows 10 x64 (build 20180)

Produk matriks: default

lokal:
[1] LC_COLLATE=Cina (Sederhana)_Cina.936
[2] LC_CTYPE=Cina (Sederhana)_Cina.936
[3] LC_MONETARY=Cina (Sederhana)_Cina.936
[4] LC_NUMERIC=C
[5] LC_TIME=Cina (Sederhana)_Cina.936

paket dasar terlampir:
[1] statistik grafik grDevices menggunakan metode kumpulan data
[7] dasar

paket terlampir lainnya:
[1] officer_0.3.12 officedown_0.2.0 flextable_0.5.10
[4] ggplot2_3.3.2 rapi_1.1.1 rajutan_1.29
[7] dplyr_1.0.2 reticulate_1.16

dimuat melalui namespace (dan tidak dilampirkan):
[1] Rcpp_1.0.5 kisi_0.20-41 unit cantik_1.1.1
[4] sysfonts_0.8.1 ps_1.3.4 utf8_1.1.4
[7] rprojroot_1.3-2 menegaskan bahwa_0.2.1 intisari_0.6.25
[10] R6_2.4.1 backports_1.1.9 evaluasi_0.14
[13] pilar_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 pelabelan_0.3 devtools_2.3.1
[25] stringr_1.4.0 munsell_0.5.0 tinytex_0.25
[28] compiler_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 rapi pilih_1.1.0
[37] tibble_3.0.3 bookdown_0.20 fansi_0.4.1
[40] crayon_1.3.4 showtextdb_3.0 denganr_2.2.0
[43] grid_4.0.2 jsonlite_1.7.0 gtable_0.3.0
[46] siklus hidup_0.2.0 magrittr_1.5 scales_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 elipsis_0.3.1
[58] generics_0.0.2 vctrs_0.3.2 tools_4.0.2
[61] showtext_0.9 glue_1.4.1 purrr_0.3.4
[64] prosesx_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] gunakan ini_1.6.1

bug

Semua 7 komentar

```````


Judul : "Tanpa Judul"
keluaran:
officedown::rdocx_document:

bawaan

{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE)

Bab1 {#ch1}

Bab2 {#ch2}

Lihat @ref (ch1).

Ketika @ref (ch1) dikelilingi oleh string multibyte (misalnya, karakter Cina), mungkin akan mengalami kesalahan.

Masalah Anda terkait dengan fakta bahwa Anda tidak bekerja dengan file yang disandikan UTF-8.

R, R Penurunan harga dan Windows tidak berfungsi dengan baik saat penyandian bukan UTF-8.

Capture d’écran 2020-08-27 à 10 53 27

Tanpa Judul.docx

Ya, @davidgohel , Anda benar. Meskipun file .Rmd dalam UTF-8, OS berjalan pada pengkodean GBK. Ketika saya mengubah ke bookdown::word_document2 , mesin rajutan berhasil mengkompilasi file. Tapi aku masih mengerti?? tempat bookmark seharusnya muncul.

Anda tidak perlu mencoba fungsi format keluaran baru.

Hasil yang ditunjukkan di bawah ini dibuat dengan Windows dengan lokal Perancis. Tetapi saya memastikan file dikodekan sebagai UTF-8 (saya menggunakan readr::guess_encoding() , jika tidak dikodekan UTF-8, saya dapat mengubahnya ke UTF8 dengan fpeek::peek_iconv() ).

Bisakah Anda menunjukkan hasil dari

readr::guess_encoding("your/rmd/file")

Hasilnya adalah

tidak | pengkodean | kepercayaan diri
---|-------------|-----------:
1 | UTF-8 | 1
2 | windows-1252 | 0,28

Hai @madlogos ,

Saya juga pengguna Cina. Masalah multibyte juga telah mengganggu saya untuk waktu yang lama. Inilah trik saya untuk itu:

  1. Tulis @ref seperti biasa;
  2. Simpan file Rmd dan readr::read_lines itu;
  3. Cocokkan string yang berisi pola "\\\\@ref\\([^\\)]+\\)" ;
  4. Pisahkan dan pastikan "\\\\@ref\\([^\\)]+\\)" pada satu baris;
  5. Simpan vektor karakter ke file Rmd baru dan render dengan format yang Anda suka. Selesai!

Misalnya, 请参考表\@ref(tab: coco)中的数据 harus dibagi menjadi
[baris 1] 请参考表
[baris 2] \@ref(tab: coco)
[baris 3] 中的数据

Yah, saya tidak yakin apakah ini solusi yang efektif tetapi itu berhasil untuk saya. 😄.

@bishun945 terima kasih atas perubahannya. Barang bagus.

@madlogos Saya telah mencoba solusi lain: cukup alihkan sistem Anda dan bahasa MS Word ke Bahasa Inggris.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat