Officedown: Lesezeichen \@ref funktioniert nicht für Multibyte-Strings

Erstellt am 27. Aug. 2020  ·  7Kommentare  ·  Quelle: davidgohel/officedown

Angenommen, ich habe eine .Rmd-Datei wie unten:

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

Wenn \@ref (ch1) von Multibyte-Strings (z. B. chinesische Schriftzeichen) umgeben ist, treten möglicherweise Fehler auf.

  • Reines Multibyte + ref

    • Beispiel: 上下\@ref(ch1)
    • Ergebnis: richtig
  • Gemischtes Multibyte/Singlebyte + Ref

    • Beispiel: 上a下\@ref(ch1)
    • Ergebnis: falsch (上a下@ref (ch1))
  • ref + Multibyte

    • Beispiel: \@ref(ch1)。
    • Ergebnis: Kompilieren fehlgeschlagen


    Fehler in nchar(u, itype): ungültiger Multibyte-String, Element 1

    Anrufe:... regmatches<- -> regmatches -> Map -> mapply ->



Können Sie sich dieses Problem bitte ansehen? Danke.


Sitzungsinfo()

R-Version 4.0.2 (2020-06-22)
Plattform: x86_64-w64-mingw32/x64 (64-Bit)
Läuft unter: Windows 10 x64 (Build 20180)

Matrix-Produkte: Standard

Gebietsschema:
[1] LC_COLLATE=Chinesisch (vereinfacht)_China.936
[2] LC_CTYPE=Chinesisch (vereinfacht)_China.936
[3] LC_MONETARY=Chinesisch (vereinfacht)_China.936
[4] LC_NUMERIC=C
[5] LC_TIME=Chinesisch (vereinfacht)_China.936

angehängte Basispakete:
[1] stats graphics grDevices utils Datensätze Methoden
[7] Basis

andere angehängte Pakete:
[1] offizier_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 reticulate_1.16

über einen Namensraum geladen (und nicht angehängt):
[1] Rcpp_1.0.5 lattice_0.20-41 prettyunits_1.1.1
[4] sysfonts_0.8.1 ps_1.3.4 utf8_1.1.4
[7] rprojroot_1.3-2assertthat_0.2.1digest_0.6.25
[10] R6_2.4.1 Backports_1.1.9 Evaluation_0.14
[13] pillar_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] 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 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] lifecycle_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 ellipse_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] 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] usethis_1.6.1

bug

Alle 7 Kommentare

```````


Titel: "Ohne Titel"
Ausgang:
officedown::rdocx_document:

Ursprünglich

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

Kapitel1 {#ch1}

Kapitel2 {#ch2}

Siehe @ref (ch1).

Wenn @ref (ch1) von Multibyte-Strings (z. B. chinesische Schriftzeichen) umgeben ist, treten möglicherweise Fehler auf.

Ihr Problem hängt damit zusammen, dass Sie nicht mit einer UTF-8-codierten Datei arbeiten.

R, R Markdown und Windows funktionieren nicht gut, wenn die Codierung nicht UTF-8 ist.

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

Ohne Titel.docx

Ja, @davidgohel , du hast Recht. Obwohl die .Rmd-Datei in UTF-8 vorliegt, läuft das Betriebssystem mit GBK-Codierung. Wenn ich zu bookdown::word_document2 wechsle, schafft es die Knitr-Engine, die Datei zu kompilieren. Aber ich bekomme immer noch ?? wo das Lesezeichen erscheinen soll.

Sie müssen keine neuen Ausgabeformatfunktionen ausprobieren.

Das unten gezeigte Ergebnis wurde mit einem Windows mit französischem Gebietsschema erstellt. Aber ich habe sichergestellt, dass die Datei als UTF-8 kodiert wurde (ich verwende readr::guess_encoding() , wenn nicht UTF-8 kodiert, kann ich sie mit fpeek::peek_iconv() in UTF8 ändern).

Könntest du das Ergebnis zeigen

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

Die Ergebnisse sind

nein | Kodierung | Vertrauen
---|-------------|-----------:
1 | UTF-8 | 1
2 | windows-1252 | 0,28

Hallo @madlogos ,

Ich bin auch ein chinesischer Benutzer. Das Multibyte-Problem beschäftigt mich auch schon lange. Hier ist mein Trick dafür:

  1. Schreiben Sie wie gewohnt @ref ;
  2. Speichern Sie die Rmd-Datei und readr::read_lines sie;
  3. Passen Sie die Zeichenfolgen an, die das Muster "\\\\@ref\\([^\\)]+\\)" enthalten;
  4. Teilen Sie es auf und stellen Sie sicher, dass die "\\\\@ref\\([^\\)]+\\)" in einer einzigen Zeile stehen;
  5. Speichern Sie den Zeichenvektor in einer neuen Rmd-Datei und rendern Sie ihn im gewünschten Format. Fertig!

Zum Beispiel sollte 请参考表\@ref(tab: coco)中的数据 aufgeteilt werden als
[Zeile 1] 请参考表
[Zeile 2] \@ref(tab: coco)
[Zeile 3] 中的数据

Nun, ich bin mir nicht sicher, ob dies eine effektive Lösung ist, aber es funktioniert für mich. 😄

@bishun945 danke für die Antwort. Gutes Zeug.

@madlogos Ich habe eine andere Lösung ausprobiert: Stellen Sie einfach Ihr System und Ihre MS Word-Sprache auf Englisch um.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

CLRafaelR picture CLRafaelR  ·  7Kommentare

hmeleiro picture hmeleiro  ·  7Kommentare

CLRafaelR picture CLRafaelR  ·  6Kommentare

evanmascitti picture evanmascitti  ·  3Kommentare

garrettgman picture garrettgman  ·  7Kommentare