使用knitr
,我想\item
根据 R 中它们的值的排序向量对 进行排序。因此在下面的示例中,我希望项目符号根据 按照数字顺序打印df$value
,而不是按照现有的字母顺序打印。如何让 LaTeX 为我重新排列它们?
\documentclass{article}
\begin{document}
<<echo = FALSE, message = FALSE>>=
library(dplyr)
a = 1; b = 3; c = 4; d = 2
df = data.frame(name = c('a', 'b', 'c', 'd'), value = c(1, 3, 4, 2))
order = arrange(df, value)$name
@
\begin{itemize}
% some code here to rearrange based on \Sexpr{order}...
\item \Sexpr{a} is the first letter of the alphabet.
\item \Sexpr{b} is the first letter in "build".
\item \Sexpr{c} is a decent grade.
\item \Sexpr{d} stands for dog.
\end{itemize}
\end{document}
这里重要的一点是,仅仅调用\item \Sexpr{order[1]}
是不够的,因为每个中的其他文本\item
也必须重新排列。
答案1
Knirt 无法修改包含的 LaTeX 代码。因此,您必须在 R 中创建整个列表。例如,您可以创建排序字符串的 R 向量,然后添加\item
到每个元素并使用选项显示为 LaTeX 代码results="asis"
。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fmtcount}
\begin{document}
R dataframe:
<<echo=F,results='asis',message=F>>=
require(xtable)
df = data.frame(name = c("a","b","c","d"), value = c(1, 3, 4, 2),
comment=c(
"is the first letter of the alphabet.",
'is the first letter in “build”.',
"is a decent grade.",
"stands for dog."))
xtable(df,digits=0)
@
List of comments in \LaTeX\ by ordered value:
<<echo=F,results='asis'>>=
odf = df[with(df, order(value)), ]
cat("\\begin{itemize}\\item")
cat(paste("\\ordinalnum{",odf$value,
"} (\\texttt{",odf$name,"}) ",odf$comment, sep=""), sep="\n\\item ")
cat("\\end{itemize}")
@
\end{document}