kframe от knitr, создающий ошибки в LaTeX, без цвета тени для фрагментов кода

#r #latex #knitr

#r #Латекс #knitr

Вопрос:

Я использую R knitr и LaTeX для создания pdf. Технический центр выдает «!Неопределенная управляющая последовательность» для ошибок вывода сборки. Технический центр указывает, что строки с begin{kframe} и end{kframe} являются проблемными строками.

Удаление среды kframe устраняет ошибки из выходных данных сборки, но в документе не отображается цвет тени для фрагментов кода, даже если среда kframe удалена.

Я обновил свои пакеты MiKTeX и knitr. Преамбула документа включает usepackage{framed}; usepackage{xcolor}, похоже, не влияет на проблему. Изменение параметра фона knitr не устранило проблему.

Вот преамбула моего документа в файле Rnw (knitr добавляет к этому):

 documentclass{article}
usepackage{Sweave}
usepackage{amsmath}
usepackage{hyperref}
usepackage[margin = 0.5in]{geometry}
usepackage{amsfonts}
usepackage{amsthm}
usepackage{marvosym}
usepackage{paralist}
usepackage{framed}
usepackage{url}
usepackage{xcolor}
usepackage{array}

renewcommandqedsymbol{Squarepipe}

title{title changed for question}
author{author changed for question}

newtheorem{theorem}{Theorem}[section]
newtheorem{lemma}[theorem]{Lemma}
newtheorem{proposition}[theorem]{Proposition}
newtheorem{corollary}[theorem]{Corollary}

newenvironment{definition}[1][Definition]{begin{trivlist}
    item[hskip labelsep {bfseries #1}]}{end{trivlist}}
newenvironment{conjecture}[1][Conjecture]{begin{trivlist}
item[hskip labelsep {bfseries #1}]}{end{trivlist}}
begin{document}
 

Спасибо!

Ответ №1:

Среда kframe должна быть определена в вашей преамбуле latex. Это определено, например, в примере, видимом в справке (knit)

  library(knitr)
 (f = system.file("examples", "knitr-minimal.Rnw", package = "knitr"))
 knit(f)  # compile to tex
 

Глядя на сгенерированный документ knitr-minimal.tex , вы можете увидеть определение kframe среды:

 usepackage{framed}
makeatletter
newenvironment{kframe}{%
 defat@end@of@kframe{}%
 ifinnerifhmode%
  defat@end@of@kframe{end{minipage}}%
  begin{minipage}{columnwidth}%
 fifi%
 defFrameCommand##1{hskip@totalleftmargin hskip-fboxsep
 colorbox{shadecolor}{##1}hskip-fboxsep
     % There is no \@totalrightmargin, so:
     hskip-linewidth hskip-@totalleftmargin hskipcolumnwidth}%
 MakeFramed {advancehsize-width
   @totalleftmarginz@ linewidthhsize
   @setminipage}}%
 {parunskipendMakeFramed%
 at@end@of@kframe}
makeatother
 

Добавление этого в вашу преамбулу latex может решить проблему. Об этом, конечно, позаботятся, когда вы создаете полные PDF-документы из knitr. Это проблема только при использовании knitr для генерации фрагментов Latex, которые позже повторно используются в больших документах Latex.