您可以使用BibLaTeX和直接的.tex文件创建章节书目,如此MWE所示:
% main.tex
\documentclass{report}
\usepackage{natbib}
\usepackage{chapterbib}
\begin{document}
\include{chap1}
\include{chap2}
\end{document}
% chap1.tex
\chapter{one chapter}
text~\cite{paper1}
text~\cite{paper2}
\bibliographystyle{plainnat}
\bibliography{biblio}
% chap2.tex
\chapter{another chapter}
text~\cite{paper2, paper3}
\bibliographystyle{plainnat}
\bibliography{biblio}
% biblio.bib
@Article{paper1,
author = {John Smith},
title = {A title},
journal = {A Journal},
year = {2010}
}
@Article{paper2,
author = {John Doe},
title = {A paper},
journal = {Another journal},
year = {2009}
}
@Article{paper3,
author = {Yuppie Networking},
title = {My paper},
journal = {The best journal},
year = {2000}
}可以使用以下脚本成功编译上述文件:
% compile.bash
#!/bin/bash
pdflatex main.tex
for auxfile in chap*.aux
do
bibtex `basename $auxfile .aux`
done
pdflatex main.tex
pdflatex main.tex我希望使用create、BibLaTeX和.Rnw文件(不是.tex文件)重新创建上述功能。这里有一个小的不起作用的例子。(我知道本例缺少R代码块,但我的用例将包含R代码块。)
% main.Rnw
\documentclass{report}
\usepackage{natbib}
\usepackage{chapterbib}
\begin{document}
\Sexpr{knitr::knit_child("chap1.Rnw")}
\Sexpr{knitr::knit_child("chap2.Rnw")}
\end{document}
% chap1.Rnw
\chapter{one chapter}
text~\cite{paper1}
text~\cite{paper2}
\bibliographystyle{plainnat}
\bibliography{biblio}
% chap2.Rnw
\chapter{another chapter}
text~\cite{paper2, paper3}
\bibliographystyle{plainnat}
\bibliography{biblio}
% knit_script.R
knitr::knit(input = "main.Rnw")
% compileRnw.bash
/usr/local/bin/Rscript knit_script.R
pdflatex main.tex
for auxfile in chap*.aux
do
bibtex `basename $auxfile .aux`
done
pdflatex main.tex
pdflatex main.tex当我运行compileRnw.bash脚本时,生成的文档缺少书目。
从.Rnw文件创建包含章节目录的文档时,main.Rnw和compileRnw.bash应该是什么样子的?
提前感谢您的帮助!
发布于 2021-08-27 22:07:07
\Sexpr{knitr::knit_child("chap1.Rnw")}将编织chap1.Rnw并返回chap1.tex而不是\include{chap1}的文本内容。这就是使用.Rnw (您的非工作示例)和普通.tex (您的第一个工作示例)之间的区别,这意味着不会有chap1.aux,因为只有一个.tex输出文件,即main.tex。您也将只获得一个.aux文件,即main.aux。然后,您需要在main.aux而不是chap*.aux上运行bibtex。您的shell脚本应为:
pdflatex main.tex
bibtex main.aux
pdflatex main.tex
pdflatex main.tex实际上,您并不真正需要这个shell脚本,因为knitr::knit2pdf('main.Rnw')会自动执行所有这些步骤。或者,如果您使用RStudio,则可以单击RStudio工具栏上的"Compile PDF“按钮。
顺便说一句,我不知道你为什么要声明
\bibliographystyle{plainnat}
\bibliography{biblio}在每一章中。这似乎是不必要的。您只需在main.Rnw中声明一次bib样式和数据库。如果你在每一章中重复它们,bibtex会抱怨,尽管这并不是真的很糟糕。
发布于 2021-08-29 19:57:57
感谢您的回复!
我要澄清一点。
\bibliographystyle{plainnat}
\bibliography{biblio}在每个章节文件中,因为我想在每个章节的末尾有一个参考书目。具体地说,我想要两本书目,一本在第一章(只包含第一章的参考文献)之后,另一本在第二章(只包含第二章的参考文献)之后。
在main.Rnw中
\documentclass{report}
\usepackage{natbib}
\usepackage{chapterbib}
\begin{document}
% \Sexpr{knitr::knit_child("chap1.Rnw")}
% \Sexpr{knitr::knit_child("chap2.Rnw")}
\include{chap1}
\include{chap2}
\end{document}在knit_script.R中
# knit_script.R
# knitr::knit(input = "main.Rnw")
knitr::knit(input = "chap1.Rnw")
knitr::knit(input = "chap2.Rnw")
knitr::knit(input = "main.Rnw")通过这些更改,我获得了每个章节的参考书目。
https://stackoverflow.com/questions/68386455
复制相似问题