Сложная часть этого вопроса относится к LaTeX. Обратите внимание, что мой код TeX основан на этих двух вопросах на tex.stackexchange:
На одну часть вопроса легко ответить: как установить фиксированную ширину столбца, но выровнять все числовые столбцы по правому краю, а все остальные — по левому?
Это вопрос только правильных типов столбцов (см. ответы, указанные выше). Решение может быть:
\documentclass{article}
\usepackage{array}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\begin{document}
<<table_symbionts_chunk, results="asis", echo=FALSE>>=
library(xtable)
irisShort <- head(iris)
print(xtable(irisShort,
digits=rep(0,6),
align=c(
"p{0.015\\textwidth}|",
"R{0.37\\textwidth}|",
"R{0.12\\textwidth}|",
"R{0.08\\textwidth}|",
"R{0.02\\textwidth}|",
"p{0.35\\textwidth}|")))
@
\end{document}
Поскольку столбцы p{}
по умолчанию выравниваются по левому краю, нам нужно определить только один новый тип столбца для столбцов с выравниванием по правому краю с фиксированной шириной: R
.
Обратите внимание, что имена столбцов перекрываются, но это связано с шириной, указанной в вопросе.
Центрирование имен столбцов требует другого обоснования только для первой строки. Этого можно добиться с помощью команды \multicolumn
. Однако, поскольку мы хотим добавить код LaTeX к именам столбцов, мы, кроме того, должны запретить xtable
очищать имена столбцов с помощью sanitize.colnames.function = identity
:
irisShort2 <- irisShort
colnames(irisShort2) <- paste("\\multicolumn{1}{c|}{", colnames(irisShort2), "}")
print(xtable(irisShort2,
digits=rep(0,6),
align=c(
"p{0.015\\textwidth}|",
"R{0.37\\textwidth}|",
"R{0.12\\textwidth}|",
"R{0.08\\textwidth}|",
"R{0.02\\textwidth}|",
"p{0.35\\textwidth}|")),
sanitize.colnames.function = identity)
paste("\\multicolumn{1}{c|}{", colnames(irisShort2), "}")
использует исходные имена столбцов, но заключает их в \multicolumn{1}{c|}{
имя_столбца}
, который предоставляет имена столбцов по центру.
Обратите внимание, что теперь имена столбцов больше не перекрываются (вместо этого таблица становится слишком широкой) из-за измененного типа столбца в первой строке.
Два фрагмента кода в этом ответе дают следующий результат: ![введите здесь описание изображения](https://i .stack.imgur.com/xoi8g.png)
person
CL.
schedule
20.10.2015