Officedown: فشل الإشارة المرجعية \ref في العمل لسلاسل متعددة البايت

تم إنشاؤها على ٢٧ أغسطس ٢٠٢٠  ·  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) بسلاسل متعددة البايت (مثل الأحرف الصينية) ، فمن المحتمل أن تواجه أخطاء.

  • نقية multibyte + المرجع

    • مثال: 上下\@ref(ch1)
    • النتيجة: صحيحة
  • مختلط متعدد البايت / بايت واحد + المرجع

    • مثال: 上a下\@ref(ch1)
    • النتيجة: غير صحيحة (上 a 下ref (ch1))
  • المرجع + multibyte

    • مثال: \@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 = ج
[5] LC_TIME = الصينية (المبسطة) _الصين 936

الحزم الأساسية المرفقة:
[1] احصائيات رسومات GrDevices تستخدم طرق مجموعات البيانات
[7] القاعدة

الحزم الأخرى المرفقة:
[1] ضابط_0.3.12 مكتب أسفل_0.2.0 جدول مرن_0.5.10
[4] ggplot2_3.3.2 tidyr_1.1.1 knitr_1.29
[7] dplyr_1.0.2 reticulate_1.16

تم تحميلها عبر مساحة اسم (وغير مرفقة):
[1] Rcpp_1.0.5 lattice_0.20-41 وحدة جميلة_1.1.1
[4] sysfonts_0.8.1 ps_1.3.4 utf8_1.1.4
[7] يؤكد rprojroot_1.3-2 أنه _0.2.1 ملخص_0.6.25
[10] R6_2.4.1 backports_1.1.9 تقييم_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 معجبينi_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 سلسلة نصية_1.4.6
[52] farver_2.0.3 fs_1.5.0 أجهزة التحكم عن بُعد_2.2.0
[55] اختبر أن_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 Glue_1.4.1 purrr_0.3.4
[64] processx_3.4.3 pkgload_1.1.0 yaml_2.2.1
[67] colorpace_1.4-1 sessioninfo_1.1.1 memoise_1.1.0
[70] يستخدم هذا_1.6.1

bug

ال 7 كومينتر

"" ""


العنوان: "بدون عنوان"
انتاج:
المخزن :: rdocx_document:

إفتراضي

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

الفصل الأول {# الفصل 1}

الفصل 2 {# ch2}

راجع ref (ch1).

عندما يُحاطref (ch1) بسلاسل متعددة البايت (مثل الأحرف الصينية) ، فمن المحتمل أن تواجه أخطاء.

تتعلق مشكلتك بحقيقة أنك لا تعمل باستخدام ملف مشفر UTF-8.

لا تعمل R و R Markdown و Windows بشكل جيد عندما لا يكون الترميز UTF-8.

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

بدون عنوان. docx

نعم ، 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 ،

أنا مستخدم صيني. لقد أزعجتني مشكلة تعدد البايت أيضًا لفترة طويلة. ها هي حيلتي لذلك:

  1. اكتب @ref كالمعتاد ؛
  2. احفظ ملف Rmd و readr::read_lines it؛
  3. تطابق السلاسل التي تحتوي على نمط "\\\\@ref\\([^\\)]+\\)" ؛
  4. قسّمه وتأكد من "\\\\@ref\\([^\\)]+\\)" في سطر واحد ؛
  5. احفظ متجه الشخصية في ملف Rmd جديد واجعله بالتنسيق الذي تريده. فعله!

على سبيل المثال ، يجب تقسيم 请参考表\@ref(tab: coco)中的数据 كـ
[السطر 1] 请参考表
[السطر 2] \@ref(tab: coco)
[السطر 3] 中的数据

حسنًا ، لست متأكدًا مما إذا كان هذا حلاً فعالاً ولكنه يعمل بالنسبة لي. 😄

@ bishun945 أشكركم على الدوران. أشياء جيدة.

madlogos لقد جربت حلاً آخر: ما عليك سوى تبديل نظامك ولغة MS Word إلى اللغة الإنجليزية.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات