什么代码可以让我按字母顺序重新组织图表列表(并保留页码)?我的目标是将按字母顺序排列的图表列表包含在创建的 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)