Файл knitr завершился во время сканирования с использованием \@xverbatim
У меня есть следующее .Rnw
файл:
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\hskip-3.5cm\begin{tabular}{|l|}
\hline
\cellcolor[RGB]{0,0,140}{\large\textbf{\textcolor{white}{Bill To: }}}\\
\hline
\textbf{
"asdf"
}\\
\\[-1em]
\textbf{asdf@asdf.com} \\
\hline
\end{tabular}
\hskip6cm\begin{tabular}{|l|l|}
\hline
Date: & 05/31/2018 \\
\hline
Invoice \#: & 1234asdf \\
\hline
\end{tabular}
\end{multicols}
\end{document}
Однако, когда я заменяю "asdf" кодом R:
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\hskip-3.5cm\begin{tabular}{|l|}
\hline
\cellcolor[RGB]{0,0,140}{\large\textbf{\textcolor{white}{Bill To: }}}\\
\hline
\textbf{
<<asdf>>=
cat("asdf")
@
}\\
\\[-1em]
\textbf{asdf@asdf.com} \\
\hline
\end{tabular}
\hskip6cm\begin{tabular}{|l|l|}
\hline
Date: & 05/31/2018 \\
\hline
Invoice \#: & 1234asdf \\
\hline
\end{tabular}
\end{multicols}
\end{document}
Я получаю следующую ошибку:
File ended while scanning use of \@xverbatim
Глядя на сгенерированный .tex
файл, это соответствующая часть:
\textbf{
\begin{knitrout}
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}\begin{kframe}
\begin{alltt}
\hlkwd{cat}\hlstd{(}\hlstr{"asdf"}\hlstd{)}
\end{alltt}
\begin{verbatim}
## asdf
\end{verbatim}
\end{kframe}
\end{knitrout}
}\\
и это то, что .log
Файл говорит:
Runaway argument?
#### asdf \end {verbatim} \end {kframe} \end {knitrout} \check@icr \expandafte
r \ETC.
! File ended while scanning use of \@xverbatim.
<inserted text>
\par
<*> test2.tex
I suspect you have forgotten a `}', causing me
to read past where you wanted me to stop.
I'll try to recover; but if the error is serious,
you'd better type `E' or `X' now and fix your file.
! Emergency stop.
<*> test2.tex
Что я делаю неправильно?
1 ответ
По умолчанию вывод R упакован в дословную среду LaTeX, и вы не можете поместить один из них внутрь \textbf
, Есть несколько разных подходов, чтобы исправить это.
Самое простое - просто использовать параметр чанка. results='asis'
т.е.
\textbf{
<<asdf,results='asis',echo=FALSE>>=
cat("asdf")
@
}
Это предотвратит knitr
от добавления среды вокруг выхода; код LaTeX будет просто
\textbf{
asdf
}
что должно быть хорошо.
Если вы хотите форматирование по умолчанию, но просто хотите изменить шрифт или стиль текста, все будет сложнее. Вы должны сказать knitr
использовать другую среду вместо verbatim
например, Verbatim
среда, предоставляемая fancyvrb
пакет. Вы можете сделать это, изменив выходной хук. Например, это должно работать
% in the preamble:
\usepackage{fancyvrb}
<<include=FALSE>>=
oldhook <- knitr::knit_hooks$get("output")
bold <- function(x, options)
paste0("\\begin{Verbatim}[fontseries=b]\n", x, "\\end{Verbatim}")
@
% in the body:
<<asdf,echo=FALSE>>=
knitr::knit_hooks$set(output = bold)
cat("asdf")
@
% Optionally restore the old hook...
<<include=FALSE>>=
knitr::knit_hooks$set(output = oldhook)
@
Тем не менее, это не всегда работает, потому что некоторые варианты (например, fontseries=b
) конфликтует с настройками, которые knitr
делает. Вы можете изменить курсив (используя fontshape=it
), но не жирным шрифтом. Так что придерживайтесь первого предложения.