Проблемы перекрестных ссылок в LaTex с knitr и xtable

В настоящее время я работаю с R Studio для создания PDF-документов с помощью R/knitr в LaTex. В этих документах я хочу представить часть своих результатов в таблицах, на которые я хочу сослаться в тексте. Я создаю эти таблицы, используя пакет xtable в R, и он отлично работает и дает мне правильные таблицы. Пока все хорошо, но когда дело доходит до ссылок, я столкнулся с некоторыми неприятностями. На данный момент вывод PDF относится к разделу, в котором находится таблица. Я искал в некоторых файлах справки LaTex, и было сказано, что это происходит, когда метка плавающего объекта помещается перед заголовком. Однако когда я проверил вывод xtable, он был помещен после заголовка. У кого-нибудь есть решение для этого? Вот пример кода, похожего на тот, который я использовал, который дает мне такой же результат в PDF (я оставил все пакеты, используемые в LaTex и R, чтобы убедиться, что это не что-то, вызванное каким-либо вмешательством в них).

\documentclass[preprint,authoryear]{elsarticle}
\usepackage[a4paper]{geometry}
\usepackage{natbib}
\usepackage{mathpazo}
\usepackage{booktabs}
\usepackage{dcolumn}
\usepackage[breaklinks]{hyperref}
\usepackage{hyperref,url}
\usepackage{lscape}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{amssymb}
\usepackage{gensymb}
\usepackage[allow-number-unit-breaks=true]{siunitx}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[version=3]{mhchem}
\usepackage[section]{placeins}
\usepackage[colorinlistoftodos]{todonotes}
\usepackage{float}
\usepackage{lineno}
\begin{document}
\section{Test}

This is a test. You can see the result in Tab. \ref{tab:Test}.
\section{Table}
<<Ini,eval=TRUE,include=FALSE,echo=FALSE,warning=FALSE,error=FALSE,cache=FALSE>>=
#set chunk options
opts_chunk$set(echo=FALSE,warning=FALSE,message=FALSE,dev.args=list(pointsize=12),fig.pos="!h",dpi=500)

require(stringr)
require(reshape2)
require(lubridate)
library(plyr)
library(lattice)  #Needed for multi-panel graphs
library(mgcv)     #Needed for smoothing curves in scatterplots
library(ggplot2)
library(ggmap)
require(gridExtra)
library(scales)
library(xtable)
require(nlme)
library(zoo)
@

<<results='asis',echo=FALSE>>=
Test<-data.frame(Test=c(1:3),a=c(4:6))
print(xtable(Test,caption="Test table",label="tab:Test",
             digits=2),
      include.rownames=FALSE,
      caption.placement="top",
      latex.environments = "left")

@



\end{document}

Результат из кода xtable выглядит следующим образом:

% latex table generated in R 3.0.3 by xtable 1.7-4 package
% Tue Jun 02 09:27:38 2015
\begin{table}[ht]
\begin{left}
\caption{Test table} 
\label{tab:Test}
\begin{tabular}{rr}
  \hline
Test & a \\ 
  \hline
  1 &   4 \\ 
    2 &   5 \\ 
    3 &   6 \\ 
   \hline
\end{tabular}
\end{left}
\end{table}

Когда я пытаюсь запустить это, я получаю 4 предупреждающих сообщения, которые кажутся странными, но все еще есть вывод PDF. Все 4 предупреждения относятся к коду, который генерирует xtable. Вот вывод из журнала в R Studio:

! Missing $ inserted.
<inserted text> 
                $
l.81 \begin{left}

I've inserted a begin-math/end-math symbol since I think
you left one out. Proceed, with fingers crossed.

! Missing delimiter (. inserted).
<to be read again> 
                   \global 
l.82 \caption
             {Test table}
I was expecting to see something like `(' or `\{' or
`\}' here. If you typed, e.g., `{' instead of `\{', you
should probably delete the `{' by typing `1' now, so that
braces don't get unbalanced. Otherwise just proceed.
Acceptable delimiters are characters whose \delcode is
nonnegative, or you can use `\delimiter <delimiter code>'.

! Missing $ inserted.
<inserted text> 
                $
l.82 \caption{Test table}

I've inserted a begin-math/end-math symbol since I think
you left one out. Proceed, with fingers crossed.

! Missing \right. inserted.
<inserted text> 
                \right .
l.82 \caption{Test table}

I've inserted something that you may have forgotten.
(See the <inserted text> above.)
With luck, this will get me unwedged. But if you
really didn't forget anything, try typing `2' now; then
my insertion and my current dilemma will both disappear.

Я надеюсь, что есть кто-то, кто сможет мне помочь!

PS: Обратите внимание, что я не могу опубликовать снимок экрана с моим выводом в формате PDF, потому что у меня недостаточно репутации.

1 ответ

Решение

left окружающая среда, кажется, портит ссылки. Я старался

% latex table generated in R 3.2.0 by xtable 1.7-4 package
% Tue Jun 02 09:53:12 2015
\begin{table}[ht]
\caption{Test table}
\label{tab:Test}
\begin{left}
\begin{tabular}{rr}
  \hline
Test & a \\ 
  \hline
  1 &   4 \\ 
    2 &   5 \\ 
    3 &   6 \\ 
   \hline
\end{tabular}
\end{left}
\end{table}

и это дает правильную ссылку.

введите описание изображения здесь

Другие вопросы по тегам