2014-12-01 2 views
2

Я использую Lyx 2.1.2 и knitr (не уверен, как определить версию) на Fedora 20. У меня возникла проблема с прекращением кусков нарезанных кусков, когда кусок встроен в ячейку таблицы. Если я не вхожу в итоговую строку @ для куска, я получаю сообщение об ошибке, и документ не может быть создан. Если я вхожу в последнюю строку @ для куска, он работает, но знак @ появляется буквально в ячейке таблицы после вывода из R-кода.Прекращение фрагмента Lyx/knitr в ячейках таблицы

Я подозреваю, что это часть общей проблемы, о которой я упоминал в другой публикации, связан с объектами LaTex сразу после куска наряда.

Это пример Lyx документ, который демонстрирует проблему:

\lyxformat 474 
\begin_document 
\begin_header 
\textclass article 
\use_default_options true 
\begin_modules 
knitr 
\end_modules 
\maintain_unincluded_children false 
\language english 
\language_package default 
\inputencoding auto 
\fontencoding global 
\font_roman default 
\font_sans default 
\font_typewriter default 
\font_math auto 
\font_default_family default 
\use_non_tex_fonts false 
\font_sc false 
\font_osf false 
\font_sf_scale 100 
\font_tt_scale 100 
\graphics default 
\default_output_format default 
\output_sync 0 
\bibtex_command default 
\index_command default 
\paperfontsize default 
\spacing single 
\use_hyperref false 
\papersize default 
\use_geometry false 
\use_package amsmath 1 
\use_package amssymb 1 
\use_package cancel 1 
\use_package esint 1 
\use_package mathdots 1 
\use_package mathtools 1 
\use_package mhchem 1 
\use_package stackrel 1 
\use_package stmaryrd 1 
\use_package undertilde 1 
\cite_engine basic 
\cite_engine_type default 
\biblio_style plain 
\use_bibtopic false 
\use_indices false 
\paperorientation portrait 
\suppress_date false 
\justification true 
\use_refstyle 1 
\index Index 
\shortcut idx 
\color #008000 
\end_index 
\secnumdepth 3 
\tocdepth 3 
\paragraph_separation indent 
\paragraph_indentation default 
\quotes_language english 
\papercolumns 1 
\papersides 1 
\paperpagestyle default 
\tracking_changes false 
\output_changes false 
\html_math_output 0 
\html_css_as_file 0 
\html_be_strict false 
\end_header 

\begin_body 

\begin_layout Standard 
This is an example of a problem that arises when knitr chunks are embedded 
in Lyx table cells. 
Here is the table: 
\end_layout 

\begin_layout Standard 
\begin_inset Tabular 
<lyxtabular version="3" rows="2" columns="2"> 
<features rotate="0" tabularvalignment="middle"> 
<column alignment="center" valignment="top"> 
<column alignment="center" valignment="top"> 
<row> 
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> 
\begin_inset Text 

\begin_layout Plain Layout 
Text 
\end_layout 

\end_inset 
</cell> 
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none"> 
\begin_inset Text 

\begin_layout Plain Layout 
Chunk 
\end_layout 

\end_inset 
</cell> 
</row> 
<row> 
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> 
\begin_inset Text 

\begin_layout Plain Layout 
Arbitrary Text 
\end_layout 

\end_inset 
</cell> 
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none"> 
\begin_inset Text 

\begin_layout Plain Layout 
\begin_inset Flex Chunk 
status open 

\begin_layout Plain Layout 

<<example,echo=FALSE>>= 
\end_layout 

\begin_layout Plain Layout 

print("Hello World") 
\end_layout 

\begin_layout Plain Layout 

@ 
\end_layout 

\end_inset 


\end_layout 

\end_inset 
</cell> 
</row> 
</lyxtabular> 

\end_inset 


\end_layout 

\end_body 
\end_document 

Это выход Текс от pdflatex:

\batchmode 
\makeatletter 
\def\[email protected]{{/home/loga/bugs/cell-chunk//}} 
\makeatother 
\documentclass[english]{article}\usepackage[]{graphicx}\usepackage[]{color} 
%% maxwidth is the original width if it is less than linewidth 
%% otherwise use linewidth (to make sure the graphics do not exceed the margin) 
\makeatletter 
\def\maxwidth{ % 
    \ifdim\[email protected]@width>\linewidth 
    \linewidth 
    \else 
    \[email protected]@width 
    \fi 
} 
\makeatother 

\definecolor{fgcolor}{rgb}{0.345, 0.345, 0.345} 
\newcommand{\hlnum}[1]{\textcolor[rgb]{0.686,0.059,0.569}{#1}}% 
\newcommand{\hlstr}[1]{\textcolor[rgb]{0.192,0.494,0.8}{#1}}% 
\newcommand{\hlcom}[1]{\textcolor[rgb]{0.678,0.584,0.686}{\textit{#1}}}% 
\newcommand{\hlopt}[1]{\textcolor[rgb]{0,0,0}{#1}}% 
\newcommand{\hlstd}[1]{\textcolor[rgb]{0.345,0.345,0.345}{#1}}% 
\newcommand{\hlkwa}[1]{\textcolor[rgb]{0.161,0.373,0.58}{\textbf{#1}}}% 
\newcommand{\hlkwb}[1]{\textcolor[rgb]{0.69,0.353,0.396}{#1}}% 
\newcommand{\hlkwc}[1]{\textcolor[rgb]{0.333,0.667,0.333}{#1}}% 
\newcommand{\hlkwd}[1]{\textcolor[rgb]{0.737,0.353,0.396}{\textbf{#1}}}% 

\usepackage{framed} 
\makeatletter 
\newenvironment{kframe}{% 
\def\[email protected]@[email protected]{}% 
\ifinner\ifhmode% 
    \def\[email protected]@[email protected]{\end{minipage}}% 
    \begin{minipage}{\columnwidth}% 
\fi\fi% 
\def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep 
\colorbox{shadecolor}{##1}\hskip-\fboxsep 
    % There is no \\@totalrightmargin, so: 
    \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% 
\MakeFramed {\advance\hsize-\width 
    \@totalleftmargin\[email protected] \linewidth\hsize 
    \@setminipage}}% 
{\par\unskip\endMakeFramed% 
\[email protected]@[email protected]} 
\makeatother 

\definecolor{shadecolor}{rgb}{.97, .97, .97} 
\definecolor{messagecolor}{rgb}{0, 0, 0} 
\definecolor{warningcolor}{rgb}{1, 0, 1} 
\definecolor{errorcolor}{rgb}{1, 0, 0} 
\newenvironment{knitrout}{}{} % an empty environment to be redefined in TeX 

\usepackage{alltt} 
\usepackage[T1]{fontenc} 
\usepackage[latin9]{inputenc} 

\makeatletter 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. 
%% Because html converters don't know tabularnewline 
\providecommand{\tabularnewline}{\\} 

\makeatother 

\usepackage{babel} 
\IfFileExists{upquote.sty}{\usepackage{upquote}}{} 
\begin{document} 
This is an example of a problem that arises when knitr chunks are 
embedded in Lyx table cells. Here is the table: 

\begin{tabular}{|c|c|} 
\hline 
Text & 
Chunk\tabularnewline 
\hline 
\hline 
Arbitrary Text & 

\begin{knitrout} 
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}\begin{kframe} 
\begin{verbatim} 
## [1] "Hello World" 
\end{verbatim} 
\end{kframe} 
\end{knitrout} 
@\tabularnewline 
\hline 
\end{tabular} 
\end{document} 

Глядя на выходе Tex (четыре линии от дна) @ mark появляется вне среды knitrout, но в файле Lyx знак @ находится внутри фрагмента и (по крайней мере, в терминах WYSIWYM), очевидно, не предназначен для отображения в документе.

Есть ли способ обойти это или это ошибка, требующая исправления? Конечно, если есть какие-то другие данные, которые я могу опубликовать, это поможет, просто дайте мне знать.

Спасибо!

+0

Хороший пост! Благодарим вас за предоставление MWE. Один незначительный комментарий: когда вы ссылаетесь на другой вопрос, это полезно, если вы ссылаетесь на него. В этом случае вы ссылаетесь на http://stackoverflow.com/questions/27182368/missing-text-in-pdf-after-r-chunk-in-lyx-knitr/27223059. Вы правы в своем подозрении, что это связано с этим сообщением. – scottkosty

ответ

2

Это связано со следующим LyX ошибка: http://www.lyx.org/trac/ticket/8875 (который будет зафиксирован в LyX 2.2.0)

У вас уже есть одна работа вокруг (добавление @). Другая работа, вокруг которой вы можете предпочесть, - использовать LyX ERT (чтобы узнать больше о различиях между фрагментами ERT и LyX, см. Difference between ERT and LyX' custom knitr insets). Чтобы сделать это, удалите чанка вставку, и поместите курсор в ячейку таблицы, где она была, и нажмите «Ctrl + L» (или Вставка> TeX код)

<<example,echo=FALSE>>= 
print("Hello World") 
@ 

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

Обратите внимание, что экспорт в Rnw может помочь в диагностике этих проблем.

Смежные вопросы