我正在使用R包(xtable
和knitr
)和Latex包(longtable
和hyperref
)来准备文档。
我的一张桌子很长,分成多页。事实证明,"表格列表"显示此表出现的每个页码,但所有超链接都会将我带到此表的开头。
我的问题是,"表格列表"如何才能显示此表出现的第一个页码。
\documentclass{article}
\usepackage{longtable}
\usepackage{hyperref}
<<setup, include=FALSE, cache=FALSE>>=
library(knitr)
library(xtable)
@
\begin{document}
\listoftables
\newpage
<<echo=FALSE,results='asis'>>=
## some customerized settings for "longtable"
addtorow <- list()
addtorow$pos <- list()
addtorow$pos[[1]] <- c(0)
addtorow$command <- c(paste("\\hline \n",
"\\endhead \n",
"\\hline \n",
"{\\footnotesize Continued on next page} \n",
"\\endfoot \n",
"\\endlastfoot \n",sep=""))
## create a long table
d <- data.frame(ID=rep(1:300), LAB=rnorm(300))
## execute "xtable"
dTab <- xtable(d, caption="This is Table 1")
print(dTab,
tabular.environment = "longtable",
floating = FALSE,
include.colnames = TRUE,
include.rownames = FALSE, #addtorow substitute default row names
add.to.row = addtorow, # make the substitution here
hline.after=c(-1), # addtorow substitute default hline for first row
caption.placement="top"
)
@
\end{document}
答案 0 :(得分:2)
这个问题需要分两部分来解答:
xtable
生成该代码?第一部分已经在tex.stackexchange: How to use a longtable with only one entry in the list of tables得到答案。归结为在表格的第一个标题中使用\caption{…}
,在以下标题中使用\caption*{…}
。
包括问题中的页脚,所需的LaTeX如下所示:
\begin{longtable}{rr}
\caption{This is Table 1} \\ \hline
\endfirsthead
\caption*{This is Table 1} \\ \hline
ID & LAB \\
\hline
\endhead
\hline
{\footnotesize Continued on next page}
\endfoot
\endlastfoot
ID & LAB \\
\hline
1 & 1.08 \\
2 & -0.99 \\
3 & 1.64 \\
(请注意,ID & LAB
之后的\endlastfoot
也可以进入第一个标题部分,但使用xtable
可以更轻松地生成上述结构。)
第二部分有点棘手。默认情况下,xtable
在表头中包含\caption
命令。使用add.to.row
的{{1}}选项,我们可以在表体前添加内容,但我们无法在print.xtable
命令之前添加内容(据我所知)。
因此,为了实现上述结构,我们尽可能地抑制自动生成的LaTeX代码并手动添加正确的表头。
这可以通过\caption
的{{1}}选项完成。关于表格的元数据(only.contents
,print.xtable
等)的所有参数都已过时,因为我们自己编写表头:
latex.environment
根据要求,LOF只包含一个条目:
完整代码:
floating
解决如何轮换列名的additional question:
<<echo=FALSE, results='asis'>>=
## create a long table
d <- data.frame(ID=rep(1:300), LAB=rnorm(300))
## execute "xtable"
dTab <- xtable(d)
cat(sprintf("
\\begin{longtable}{rr}
\\caption{%1$s} \\\\ \\hline
\\endfirsthead
\\caption*{%s} \\\\ \\hline
%2$s \\\\
\\hline
\\endhead
\\hline
{\\footnotesize %3$s}
\\endfoot
\\endlastfoot",
"This is Table 1",
paste(colnames(dTab), collapse = " & "),
"Continued on next page"))
print(dTab,
include.colnames = TRUE,
include.rownames = FALSE,
only.contents = TRUE
)
cat("\\end{longtable}")
@
添加到序言中。\documentclass{article}
\usepackage{longtable}
\usepackage{hyperref}
<<setup, include=FALSE, cache=FALSE>>=
library(knitr)
library(xtable)
@
\begin{document}
\listoftables
<<echo=FALSE, results='asis'>>=
## create a long table
d <- data.frame(ID=rep(1:300), LAB=rnorm(300))
## execute "xtable"
dTab <- xtable(d)
cat(sprintf("
\\begin{longtable}{rr}
\\caption{%1$s} \\\\ \\hline
\\endfirsthead
\\caption*{%s} \\\\ \\hline
%2$s \\\\
\\hline
\\endhead
\\hline
{\\footnotesize %3$s}
\\endfoot
\\endlastfoot",
"This is Table 1",
paste(colnames(dTab), collapse = " & "),
"Continued on next page"))
print(dTab,
include.colnames = TRUE,
include.rownames = FALSE,
only.contents = TRUE
)
cat("\\end{longtable}")
@
\end{document}
代替\usepackage{rotating}
。paste(paste("\\begin{sideways}", colnames(dTab), "\\end{sideways}"), collapse = " & ")
添加到paste(colnames(dTab), collapse = " & ")
来电。