Officedown: ブックマーク\ @refがマルチバイト文字列に対して機能しない

作成日 2020年08月27日  ·  7コメント  ·  ソース: davidgohel/officedown

次のような.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)
    • 結果:不正解(上a下@ ref (ch1))
  • ref +マルチバイト

    • 例: \@ref(ch1)。
    • 結果:コンパイルに失敗しました


    nchar(u、itype)のエラー:無効なマルチバイト文字列、要素1

    呼び出し:... regmatches <-> regmatches-> Map-> mapply->



この問題を調べていただけますか? ありがとう。


sessionInfo()

Rバージョン4.0.2(2020-06-22)
プラットフォーム:x86_64-w64-mingw32 / x64(64ビット)
実行中:Windows 10 x64(ビルド20180)

マトリックス製品:デフォルト

ロケール:
[1] LC_COLLATE =中国語(簡体字)_China.936
[2] LC_CTYPE =中国語(簡体字)_China.936
[3] LC_MONETARY =中国語(簡体字)_China.936
[4] LC_NUMERIC = C
[5] LC_TIME =中国語(簡体字)_China.936

添付の基本パッケージ:
[1]統計グラフィックgrDevicesutilsデータセットメソッド
[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.2reticulate_1.16

名前空間を介してロードされます(接続されていません):
[1] Rcpp_1.0.5lattice_0.20-41prettyunits_1.1.1
[4] sysfonts_0.8.1 ps_1.3.4 utf8_1.1.4
[7] rprojroot_1.3-2 assertthat_0.2.1digest_0.6.25
[10] R6_2.4.1 backports_1.1.9evaluate_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 fani_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.2ellipsis_0.3.1
[58] generics_0.0.2 vctrs_0.3.2 tools_4.0.2
[61] showtext_0.9glue_1.4.1purrr_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

全てのコメント7件

`` `` `` ``


タイトル:「無題」
出力:
officedown :: rdocx_document:

ディフォルト

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

第1章{#ch1}

第2章{#ch2}

@ref (ch1)を参照してください。

@ref (ch1)がマルチバイト文字列(漢字など)で囲まれていると、エラーが発生する可能性があります。

  • 純粋なマルチバイト+ ref: …… ref(ch1)
  • 例:上a下@ ref (ch1)
  • ref +マルチバイト: @ref (ch1)。
    `` `` `` ``

問題は、UTF-8でエンコードされたファイルを使用していないという事実に関連しています。

エンコーディングがUTF-8でない場合、R、R Markdown、およびWindowsはうまく機能しません。

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

Untitled.docx

はい、 @ davidgohel 、その通りです。 .RmdファイルがUTF-8である場合、OSはGBKエンコーディングで実行されます。 bookdown::word_document2に変更すると、knitrエンジンはファイルをコンパイルすることができます。 しかし、私はまだ得ますか? ブックマークが表示される場所。

新しい出力フォーマット機能を試す必要はありません。

以下に示す結果は、フランス語ロケールのWindowsで作成されています。 ただし、ファイルがUTF-8としてエンコードされていることを確認しました( readr::guess_encoding()を使用しています。UTF-8でエンコードされていない場合は、 fpeek::peek_iconv()でUTF8に変更できます)。

の結果を見せていただけませんか

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

結果は

いいえ| エンコーディング| 自信
--- | ------------- | -----------:
1 | UTF-8 | 1
2 | windows-1252 | 0.28

こんにちは@madlogos

私も中国人ユーザーです。 マルチバイトの問題も長い間私を悩ませてきました。 これが私の秘訣です:

  1. 通常どおり@refを書き込みます。
  2. Rmdファイルを保存してreadr::read_lines ;
  3. "\\\\@ref\\([^\\)]+\\)"パターンを含む文字列に一致します。
  4. それを分割し、1行に"\\\\@ref\\([^\\)]+\\)"があることを確認します。
  5. 文字ベクトルを新しいRmdファイルに保存し、好きな形式でレンダリングします。 終わり!

たとえば、 请参考表\@ref(tab: coco)中的数据は次のように分割する必要があります
[1行目] 请参考表
[2行目] \@ref(tab: coco)
[3行目] 中的数据

まあ、これが効果的な解決策であるかどうかはわかりませんが、私にとってはうまくいきます。 😄

@ bishun945お返事ありがとうございます。 いい物。

@madlogos別の解決策を試しました。システムとMSWordの言語を英語に切り替えるだけです。

このページは役に立ちましたか?
0 / 5 - 0 評価