Файл knitr завершился во время сканирования использования \ @xverbatim - PullRequest
0 голосов
/ 01 июня 2018

У меня есть следующий .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}

, который дает мне ожидаемый PDF: enter image description here

Однако, когда я заменяю "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 Ответ

0 голосов
/ 02 июня 2018

По умолчанию вывод 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), но не жирным шрифтом.Так что придерживайтесь первого предложения.

...