Problema com caracteres estrangeiros: alguns funcionam (äöüßĐØ), outros não (ČĈĐĎŸ)

Problema com caracteres estrangeiros: alguns funcionam (äöüßĐØ), outros não (ČĈĐĎŸ)

Quero imprimir alguns caracteres estrangeiros no meu PDF final produzido com RStudio (0.99) + *.Rnw-File com knitr + XeLaTex (via Miktex).

Ao usar XeLaTex e poliglossia posso fazer com que todos os caracteres estrangeiros sejam impressos corretamente no PDF, se eu passar diretamente para o ambiente Tex do arquivo *.Rnw.

Se eu usar a função Cat("...") para imprimir texto no PDF dentro de um pedaço R, ela falhará em alguns caracteres ("1."), em outros não ("2....") .

Eu uso a codificação utf8 nas configurações do RStudio, que obviamente funciona bem no ambiente Tex. Mas por que a expressão de gato dentro do pedaço R não gosta dos mesmos caracteres?

O que posso fazer para usar a expressão cat("...") (que uso com frequência) também para caracteres estrangeiros?

MWE:

\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}

Resultado em PDF:

insira a descrição da imagem aqui

Verificando o arquivo tex produzido pelo RSTudio (usando o Notepad++ com suporte utf8), a linha dentro do bloco R se parece com:

insira a descrição da imagem aqui

SO: Win7/64 bits, RStudio 0.99, R 3.2.5, MikTex 2.9.5900

Responder1

Pode estar relacionado com a fonte que o sistema está usando para gerar o código; geralmente é outra fonte que não a do texto normal. Também depende do seu sistema, então você pode ter que seguir estesdoispassos

O que acontecerá se você adicionar esta linha ao seu preâmbulo de látex depois de \usepackage{fontspec}?

\usepackage{libertine}

E você pode ter que usarcaractere unicode de escape especialno seu código R, é mais robusto. Isso é, por exemplo, ß

cat("\u00DF")
# ß

e a maneira mais fácil de fazer isso é usarstringi::stri_escape_unicode()

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

Verhttps://stackoverflow.com/questions/29265172/print-unicode-character-string-in-r

informação relacionada