Я пытаюсь использовать 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
, но кажется, что он не принимает векторы символов в качестве входных данных.
Вы также можете использовать 'gsub' для замены этих специальных символов соответствующими символьными строками для использования в LaTeX, например,' gsub ("è", "\\\\' {e} ", x)'. Это может быть автоматизировано и введено в функцию, если вы хотите определить правила замены один раз на символ. – SimonG
Это был мой план B. Однако я нашел способ сделать это, не определяя все правила вручную (см. Мой ответ ниже). –