我如何使用 knitr 对 \items 进行排序?

我如何使用 knitr 对 \items 进行排序?

使用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}

相关内容