2015-08-25 3 views
1

Я пытаюсь использовать R для создания содержимого файла tex. Содержимое содержит много букв с акцентом, и я не могу правильно записать их в файл tex.Вывод символов с акцентом для использования с латексом

Вот короткий минимальный пример того, что я хотел бы выполнить:

У меня есть файл texinput.tex, который уже существует, и кодируется в UTF8 без BOM. Когда я вручную пишу é в Notepad ++ и сохраняю этот файл, он правильно компилируется в LaTex, и результат будет таким, как ожидалось.

Затем я попытался сделать это в R:

str.to.write <- "é" 
cat(str.to.write, file = "tex_list.tex", append=TRUE) 

В результате, кодируемого символа xe9 появляется в файле текс. LaTex выдает эту ошибку при попытке компиляции:

! File ended while scanning use of \[email protected]@octets.<inserted text>\par \include{texinput} 

Затем я попытался все следующие вещи перед командой кошки:

Encoding(str.to.write) <- "latin1" 

-> та же ошибка выводится как выше


str.to.write <- enc2utf8(str.to.write) 

-> тот же выход и погрешность, что и выше


Encoding(str.to.write) <- "UTF-8" 

-> это появляется в файле текс: \xe9. LaTex выдает эту ошибку: ! Undefined control sequence. \xe


Encoding(str.to.write) <- "bytes" 

-> это появляется в файле текс: \\xe9. LaTex компилируется без ошибок и выход xe9


Я знаю, что я мог бы заменить é на \'{e}, но я хотел бы иметь автоматический метод, потому что реальное содержание очень долго и содержит слово из 3-й различных латинских языки, поэтому в нем много разных персонажей с акцентом.

Однако я также был бы рад возможности автоматической очистки выходного сигнала R, который будет использоваться с латексом. Я пробовал использовать xtable и sanitize.text.function, но кажется, что он не принимает векторы символов в качестве входных данных.

+0

Вы также можете использовать 'gsub' для замены этих специальных символов соответствующими символьными строками для использования в LaTeX, например,' gsub ("è", "\\\\' {e} ", x)'. Это может быть автоматизировано и введено в функцию, если вы хотите определить правила замены один раз на символ. – SimonG

+1

Это был мой план B. Однако я нашел способ сделать это, не определяя все правила вручную (см. Мой ответ ниже). –

ответ

1

После довольно недолгих поисков и проб и ошибок, я нашел то, что работал для меня:

# create output function 
writeTex <- function(x) {write.table(x, "tex_list.tex", 
            append = TRUE, row.names = FALSE, 
            col.names = FALSE, quote = FALSE, 
            fileEncoding = "UTF-8")} 
writeTex("é") 

Выход, как ожидается (é), и он компилирует прекрасно в латексе.

0

TIPA для обработки Международный Символы фонетического алфавита (IPA) в латекс. Он стал стандартным в области лингвистики.

Смежные вопросы