Проблема с иностранными символами: некоторые работают (äöüßĐØ), некоторые нет (ČĈĐĎŸ)

Проблема с иностранными символами: некоторые работают (äöüßĐØ), некоторые нет (ČĈĐĎŸ)

Я хочу напечатать некоторые иностранные символы в моем финальном PDF-файле, созданном с помощью RStudio (0.99) + *.Rnw-File с knitr + XeLaTex (через Miktex).

Используя XeLaTex и полиглоссию, я могу добиться того, чтобы все иностранные символы печатались правильно в PDF-файле, если я передаю его непосредственно в Tex-среду файла *.Rnw.

Если я использую функцию Cat("...") для печати текста в PDF-файле в R-блоке, то в некоторых символах она дает сбой ("1."), в других — нет ("2....").

Я использую кодировку utf8 в настройках RStudio, которая, очевидно, хорошо работает в среде Tex. Но почему cat-выражение внутри R-чанка не любит те же символы?

Что можно сделать, чтобы использовать выражение cat("...") (которое я часто использовал) также и для иностранных символов?

МВЭ:

\documentclass[utf8, a4paper]{article} % with/without [utf8] does not change anything 
% !Rnw weave = knitr
% !TeX program = XeLaTeX 
\usepackage{polyglossia}
\setmainlanguage[]{english} 
\usepackage{fontspec} 

\begin{document}
Directly passed in tex environment:    
1. äöüßĐØ
2. ČĈĐĎŸ

<<echo=FALSE, results = 'asis'>>=
cat("Within a R-Knitr-Junk: \\newline")
cat("1. äöüßĐØ ~")
cat("2. ČĈĐĎŸ")
@
\end{document}

PDF-результат:

введите описание изображения здесь

Проверяя tex-файл, созданный RSTudio (используя Notepad++ с поддержкой utf8), строка внутри R-блока выглядит так:

введите описание изображения здесь

ОС: Win7/64Bit, RStudio 0.99, R 3.2.5, MikTex 2.9.5900

решение1

Это может быть связано со шрифтом, который ваша система использует для вывода кода, это обычно другой шрифт, нежели тот, который используется для обычного текста. Это также зависит от вашей системы, поэтому вам, возможно, придется следовать этимдвашаги

Что произойдет, если вы добавите эту строку в преамбулу вашего латекса после \usepackage{fontspec}?

\usepackage{libertine}

И вам, возможно, придется использоватьспециальный экранированный символ юникодав вашем коде R он более надежный. Это например ß

cat("\u00DF")
# ß

и самый простой способ сделать это — использоватьstringi::stri_escape_unicode()

stringi::stri_escape_unicode("ČĈĐĎŸ")
# \u010c\u0108\u0110\u010e\u0178

Видетьhttps://stackoverflow.com/questions/29265172/print-unicode-character-string-in-r

Связанный контент