首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针织章节书目从.Rnw文件?

针织章节书目从.Rnw文件?
EN

Stack Overflow用户
提问于 2021-07-15 08:24:44
回答 2查看 37关注 0票数 1

您可以使用BibLaTeX和直接的.tex文件创建章节书目,如此MWE所示:

代码语言:javascript
复制
% 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}
}

可以使用以下脚本成功编译上述文件:

代码语言:javascript
复制
% 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代码块。)

代码语言:javascript
复制
% 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.RnwcompileRnw.bash应该是什么样子的?

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 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脚本应为:

代码语言:javascript
复制
pdflatex main.tex
bibtex main.aux
pdflatex main.tex
pdflatex main.tex

实际上,您并不真正需要这个shell脚本,因为knitr::knit2pdf('main.Rnw')会自动执行所有这些步骤。或者,如果您使用RStudio,则可以单击RStudio工具栏上的"Compile PDF“按钮。

顺便说一句,我不知道你为什么要声明

代码语言:javascript
复制
\bibliographystyle{plainnat}
\bibliography{biblio}

在每一章中。这似乎是不必要的。您只需在main.Rnw中声明一次bib样式和数据库。如果你在每一章中重复它们,bibtex会抱怨,尽管这并不是真的很糟糕。

票数 0
EN

Stack Overflow用户

发布于 2021-08-29 19:57:57

感谢您的回复!

我要澄清一点。

  • 在示例中,我使用

代码语言:javascript
复制
\bibliographystyle{plainnat}
\bibliography{biblio}

在每个章节文件中,因为我想在每个章节的末尾有一个参考书目。具体地说,我想要两本书目,一本在第一章(只包含第一章的参考文献)之后,另一本在第二章(只包含第二章的参考文献)之后。

  • 感谢艺惠的回答,我发现以下更改产生了我想要的输出。

main.Rnw

代码语言:javascript
复制
\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

代码语言:javascript
复制
# knit_script.R

# knitr::knit(input = "main.Rnw")

knitr::knit(input = "chap1.Rnw")
knitr::knit(input = "chap2.Rnw")
knitr::knit(input = "main.Rnw")

通过这些更改,我获得了每个章节的参考书目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68386455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档