R — обработка интервалов вырезания формы [x, y] в таблицах при преобразовании в LaTeX.

Я работаю над документом в R, с Knitr в pdflatex и использую расширенную версию toLatex от memisc.

Однако, когда я создаю таблицу с интервалами вырезания, квадратные скобки не очищаются, а ошибки задания pdflatex из-за существования [.

Я пытался поместить sanitize=TRUE в код куска вязания, но это работает только для tikz.

Ранее я использовал gsub и заменил строку в самом объекте R, что довольно неэлегантно. Я надеюсь, что кто-то может указать мне на нюанс memisc или вязания, который мне не хватает, или на другую функцию/метод, который легко обрабатывал бы латексные специальные символы.

Пример

library("memisc")
library("Hmisc")
example<-data.frame(cbind(x=1:100,y=1:100))
example$x<-cut2(example$x,m=20)
toLatex(example)

ОБНОВЛЕНИЕ

В поисках SO я нашел пост о применении latexTranslate с функцией применения, но для этого требуется символы, поэтому мне пришлось бы расклассифицировать от фактора к символу.

Я нашел еще один SO-сообщение, в котором knitr:::escape_latex, фрагмент затем выводит материал в виде разметки вместо его перевода (используя results='asis') или создает таблицу в стиле R внутри блока кода (используя results='markup'). Я попытался настроить его как функцию ловушки в моем родительском документе, и это привело к выводу всего содержимого документа в виде разметки. Это совершенно новая область для меня, поэтому я, вероятно, реализовал ее неправильно.

<<setup,include=FALSE>>=
hook_inline = knit_hooks$get('inline')
knit_hooks$set(inline = function(x) {
  if (is.character(x)) x = knitr:::escape_latex(x)
  hook_inline(x)
})
@
...
<<tab-example,echo=FALSE,cache=TRUE,results='asis',sanitize=TRUE,inline=TRUE>>=
library("Hmisc")
library("memisc")
    example<-data.frame(cbind(x=1:100,y=1:100))
    example$x<-cut2(example$x,m=20)
    toLatex(example)
@

Согласно @yihui, это неверный путь

ОБНОВЛЕНИЕ 2

Я создал оболочку gsub, которая будет экранировать проценты и т. д., однако символ [ по-прежнему переводит латекс в математический режим и ошибки.


person Steph Locke    schedule 20.07.2013    source источник
comment
что такое cut2()? memisc::toLatex тоже не вижу; есть только utils::toLatex   -  person Yihui Xie    schedule 21.07.2013
comment
cut2 — более универсальная функция вырезания, предоставляемая в пакете Hmisc. В memisc функция toLatex значительно расширена рядом методов/классов, чтобы сделать ее применимой в большем количестве ситуаций.   -  person Steph Locke    schedule 21.07.2013
comment
@Yihui, спасибо за помощь   -  person Steph Locke    schedule 21.07.2013


Ответы (1)


Предоставлено людьми из tex SE, символ [ сразу после разрыва строки (\\) считается входом в математический режим. Это очень просто предотвратить, добавив {} в вывод непосредственно перед [. Моя функция выглядит так:

escapedLatex<-function (df = NULL) 
{
    require("memisc")
    gsub(gsub(x = toLatex(df, show.xvar = TRUE), pattern = "%", 
        replacement = "\\%", fixed = TRUE), pattern = "[", replacement = "{}[", 
        fixed = TRUE)
}

Я был бы очень рад увидеть какие-либо альтернативные, более элегантные решения и оставлю его открытым на несколько дней.

person Steph Locke    schedule 21.07.2013
comment
Использование [ после \\ не входит в математический режим. Это потому, что \\ — это управляющая последовательность (или макрос), которая может иметь необязательный аргумент, который указывается в квадратных скобках [..]. Вы избегаете этого предположения об аргументе, вставляя что-то (например, {}), чтобы заставить LaTeX думать, что после \\ нет необязательных аргументов. - person Werner; 23.07.2013
comment
Спасибо за пояснение! - person Steph Locke; 24.07.2013