使用 knitr 和 LaTex,如何按字母顺序排列图表列表?

使用 knitr 和 LaTex,如何按字母顺序排列图表列表?

什么代码可以让我按字母顺序重新组织图表列表(并保留页码)?我的目标是将按字母顺序排列的图表列表包含在创建的 PDF 文件中。

这是一个包含三个数字的可重现的小示例。感谢您的帮助。

\documentclass[11pt]{article}  
\begin{document}

\listoffigures

<<source, include = FALSE>>=
library(knitr)
library(ggplot2)
library(datasets)
df <- as.data.frame(Titanic)
@

<<plot1, eval = TRUE, fig.cap = "Plot 1", include = TRUE, warning = FALSE, echo=FALSE>>=
ggplot(df, aes(x=Class, y = Freq)) + geom_point()
@

<<plot2, eval = TRUE, fig.cap = "Another Plot", include = TRUE, warning = FALSE, echo=FALSE>>=
ggplot(df, aes(x=Class, y = Freq)) + geom_point()
@

<<plot3, eval = TRUE, fig.cap = "Third plot", include = TRUE, warning = FALSE, echo=FALSE>>=
ggplot(df, aes(x=Class, y = Freq)) + geom_point()
@

\end{document}

答案1

您所说的“按字母顺序重新排列”是指将数字计数器(1、2、3...)更改为字母计数器(A、B、C...)吗?有人喜欢这个吗?

姆韦

\documentclass[11pt]{article}  
\begin{document}
\renewcommand\thefigure{\Alph{figure}}
\listoffigures

<<plot1, fig.cap = "Plot 1", echo=F>>=
plot(c(1,2,3,4))
@

<<plot2, fig.cap = "Another Plot", echo=F>>=
plot(c(1,2,3,2))
@

<<plot3, fig.cap = "Third plot", echo=F>>=
plot(c(1,2,1,4))
@

\end{document}

但如果您指的是按标题内容排序,那么您基本上需要一个索引包:

姆韦

\documentclass[11pt]{article}  
\usepackage{makeidx}
\makeindex
\renewcommand{\indexname}{List of figures}
\begin{document}
\printindex{}

<<plot1, fig.cap = "\\index{Plot 1}Plot 1", echo=F>>=
plot(c(1,2,3,4))
@

<<plot2, fig.cap = "\\index{Another plot}Another Plot", echo=F>>=
plot(c(1,2,3,2))
@

<<plot3, fig.cap = "\\index{Third plot}Third plot", echo=F>>=
plot(c(1,2,1,4))
@


\end{document}

布局索引页如果你想通过 更改逗号分隔符\dotfill

答案2

最后,使用开源 R 编程语言,这是对图表列表进行字母排序的代码。

lofigs <- readLines("~/[name of your file.lof")

regmatch <- str_match_all(lofigs, "\\\\ignorespaces (.+)\\\\relax \\}\\}\\{(.+?)\\}")

regmatch2 <- lapply(regmatch, 
                    function(x) {
#                       if (str_detect(x[1, 2], "(####|\\*)")) {
#                         str_match(x[1, 2], "(.+) (?:####|\\*)(.+)")[[1]]
                        if (str_detect(x[1, 2], "(?:####|\\*)")) {
                          str_match_all(x[1, 2], "(.+) (?:####|\\*)(.+)")[[1]]
                      } else {
                        c(NA, x[1, 2], NA)
                      }
                    })

regmatch <- do.call(rbind, regmatch)
regmatch2 <- do.call(rbind, regmatch2)

image.pg.df <- cbind(regmatch2[, 2:3], regmatch[, 3])
colnames(image.pg.df) <- c("ImagePlot", "Figure", "Page")

我最终在 Excel 中对其进行了排序和清理,然后在我的 .Rnw 文件中的一块中使用了这段代码(使用knitr package

lofigs.arranged$Page <- as.integer(lofigs.arranged$Page)
print(xtable(x = lofigs.arranged), include.rownames = FALSE, tabular.environment = "longtable", floating = FALSE)

相关内容