WedX - журнал о программировании и компьютерных науках

Встроенный код с подчеркиванием в вязалке

Я хотел бы вставить функции с именем «test_sample()» как встроенный код R в документ LaTeX+knitr.

Простое включение \Sexpr{'test_sample()'} приводит к Missing $ ошибкам.

Я нашел следующие непосредственно связанные вопросы: код для вязанияR

Но уже копирование кода в ответе у меня не работает: я получаю предупреждающее сообщение R:

In hilight(code, "latex", ...) :
  the syntax of the source code is invalid; the fallback mode is used

а в LaTeX все еще ошибка Missing $.

Я попытался принять его

<<>>=
test_ = function(x){gsub("([_])", '\\\\\\_', "test_x")}
@
\Sexpr{test_(sample)} 

но это все еще приводит к той же ошибке (ам).

Если я вручную поставлю escape-символ \ перед th _ в tex-файле, созданном Knitr, это сработает, но я не могу понять, как это сделать автоматически.

Я также получаю ту же ошибку, когда копирую и вставляю решение из этого вопроса: R, Sweave, LaTeX - escape-переменные для печати в LaTeX?

<<echo=FALSE>>=
sanitize <- function(str) {
  result <- str
  result <- gsub("&", "\\\\&", result, fixed = TRUE)
  result <- gsub("_", "\\\\_", result, fixed = TRUE)
  result
}
@ 

<<>>=
(foo <- "test & _")
sanitize(foo)
@ 

When sanitized, it's ``\Sexpr{sanitize(foo)}''.

Что я делаю неправильно?

30.01.2017

  • Вы пробовали заменить скобки фигурными скобками? \Sexpr{'test_sample()'} Кроме того, перед символом подчеркивания может потребоваться escape-символ, например. _ 30.01.2017
  • Да, я тоже так пробовал, но тоже выдает ошибку Missing $. Если я вручную помещаю escape-символ, например ``, в текстовый файл, созданный Knitr, то он работает, но я не могу понять, как это сделать автоматически. Я просто помещаю его в код R, это приводит к синтаксическим ошибкам R, и код не может быть скомпилирован. 30.01.2017
  • Я только что попробовал это с помощью test\_sample() -- две обратные косые черты -- и это сработало 30.01.2017
  • @lawyeR Так ты имеешь в виду \Sexpr{"test\\_sample()"} в файле Rnw? Это приводит к предупреждению в R для меня: In hilight(code, "latex", ...) : the syntax of the source code is invalid; the fallback mode is used, а в файле tex: test\textbackslash{}\hlkwd{_sample}(), однако это не может быть скомпилировано (ошибка Missing $). Это работает, только если я вручную изменю файл tex на \hlkwd{test\_sample}() 30.01.2017

Ответы:


1

На самом деле это не имеет ничего общего с knitr или R, это все о вставке подчеркивания в LaTeX. Самый простой способ сделать это — поместить его в команду \verb, например

When sanitized, it's ``\verb!\Sexpr{sanitize(foo)}!''.

После запуска knitr это превращается в

When sanitized, it's ``\verb!test \\& \\_!''.

и это отображает то, что вы, вероятно, хотите, то есть введите здесь описание изображения

Вы можете изменить функцию sanitize(), чтобы добавить оболочку \verb, если хотите. Все, что угодно для создания строки "После".

Отредактировано, чтобы добавить:

Если вы действительно хотите сохранить подсветку кода, вам нужно сделать что-то вроде https://tex.stackexchange.com/questions/70652/alltt-packages-alltt-makes-a-newline для создания макроса, который делает часть того, что делает \verb, но не все. Это также потребует изменений в вашей функции дезинфекции.

31.01.2017
  • Код, который я вставил в исходный вопрос, приводит к предупреждению R In hilight(code, "latex", ...) : the syntax of the source code is invalid; the fallback mode is used , а не к желаемому результату, а к ```\verb!test \textbackslash{}\textbackslash{}& \textbackslash{}\textbackslash{}_!'' ` вместо этого в LaTeX. Просто для ясности: результат, который я хочу получить в файле tex после обработки с помощью yarn \hlkwd{test\_sample}() 31.01.2017
  • Это странно; это не происходит со мной. Не могли бы вы опубликовать полный файл .Rnw? Это может быть ошибка в функции hilight(); из какого это пакета? 31.01.2017
  • Я могу воспроизвести такую ​​​​ошибку, если использую неправильное количество экранов, например. '\\\\\_' выдает ошибку, потому что это недопустимый синтаксис. Вам нужно четное количество обратных косых черт. 31.01.2017
  • Кажется, это происходит и со мной, когда я использую четное количество обратных косых черт, я просто скопировал код, опубликованный выше, и это привело к этой ошибке. Функция hilight() — это функция из пакета highlight. У меня не загружен ни один пакет, кроме knitr. Если я найду время, я попытаюсь воспроизвести ошибку в полном файле Rnw, который я могу разместить здесь. На данный момент я использовал обходной путь, вручную определив команду LaTeX \newcommand{\test}{\hlkwd{test\_sample}()} 01.02.2017
  • Вы не просто скопировали опубликованный код, потому что опубликованный код не является полным файлом Rnw. Ошибка, скорее всего, произошла где-то еще в любом коде, который вы запускали. Это произойдет только в блоке кода, а не в выражении \Sexpr, где knitr не вызывает hilight. 01.02.2017
  • Это правда. Я определил knit_hooks$set(inline = function(x) { if (is.numeric(x)) return(knitr:::format_sci(x, 'latex')) highr:::hi_latex(x) }) в преамбуле, чтобы получить такую ​​же подсветку синтаксиса и для встроенного кода. 01.02.2017
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]