代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

如何保存多文件项目?

  •  8
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    我正在用乳胶写我的论文,因为我的口味有点长,所以我把它分成了几个文件。我们打电话给他们 thesis.tex , intro.tex , mat_n_met.tex , rslts.tex discsn.tex . 我已经联系了 英特克斯 , 马蒂尼亚梅特 , 特克斯特克斯 迪斯科 通过 特克斯 具有 \include{intro} (等等……) 我还创建了一个名为 r_crunching.Rnw (我通过swave运行)它包含一个块,该块使用数据分析运行R脚本,以及生成PDF输出的块,这些输出是我通过 \includegraphics (例如, 特克斯特克斯 )还在跟踪?

    如果我运行RNW(即我重新命名 特克斯特克斯 rslts.Rnw )如果不使用r脚本“链接”到块,您将得到 Sweave() 在中声明引用时出错 \Sexpr{} 不存在。有没有一种不将所有文件合并为一个.rnw的方法可以调用 \xPrP{} 在说 RNSRT. ?

    欢迎使用其他方法。

    5 回复  |  直到 6 年前
        1
  •  4
  •   Dirk is no longer here    14 年前

    暂时忘了你在和斯维夫打交道,想想乳胶的问题——对它来说 \include \includeonly 提供解决方案。用几个简单的测试文件来尝试。

    一旦你弄明白了,把swave折叠回混合物中,它就像swave在“仅仅”一个预处理步骤之后一样工作,尽管这是一个非常聪明的步骤。

        2
  •  5
  •   Gustav Delius    11 年前

    我建议使用rstudio( http://www.rstudio.com/ide/ )swave很好地集成到该IDE中,并且支持多文件文档。在处理多文件文档时,即使是synctex和tex错误日志导航也可以工作。

    在主文件中,您可以使用

    \SweaveInput{Child.Rnw}
    

    通过包含指令,可以将子文件链接回主文件

    % !Rnw root = Master.Rnw
    

    在子文件中。这样,当处理子文件并排字时,rstudio知道要排字主文件。

    有关详细信息,请参见 http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files

        3
  •  2
  •   csgillespie Carl Witthoft    13 年前

    为了扩展dirk和mjm的答案,我建议使用 \include 和生成文件。

    假设您有一个主文件: master.tex . 在那个文件中,你包括一些 .tex .Rnw 文件,即

    \include chapter1
    \include chapter2
    \include chapter3
    ....
    

    下面的makefile提供了创建 特克斯 , .R .pdf 文件夹:

    .SUFFIXES: .tex .pdf .Rnw .R
    
    MAIN = master
    ##List your your .Rnw includes
    RNWINCLUDES = chapter1 chapter2 chapter3
    TEX = $(RNWINCLUDES:=.tex)
    RFILES = $(RNWINCLUDES:=.R)
    RNWFILES = $(INCLUDES:=.Rnw)
    
    all: $(MAIN).pdf
        $(MAIN).pdf: $(TEX) $(MAIN).tex
    
    R: $(RFILES)
    
    .Rnw.R:
         R CMD Stangle $<
    
    .Rnw.tex:
         R CMD Sweave $<
    
    .tex.pdf:
         pdflatex $<
         bibtex $*
         pdflatex $<
         pdflatex $<
    

    基本上, .SUFFIXES 提供一组规则,用于从一种文件格式转换为另一种文件格式。例如,要转换自 RNW R ,我们使用命令

    `R CMD Stangle $<`
    
        4
  •  1
  •   malecki    14 年前

    一个相当明显的答案是使用makefile,可能使用package cacheswave,以正确的顺序处理相关文件。

        5
  •  0
  •   Og DeSouza    6 年前

    我在swave(rstudio下)的多文件项目解决方案如下:

    1)创建主文件,例如 master.Rnw ,其中有对子文件的调用 intro.Rnw , matmet.Rnw 等:

    \documentclass[11pt]{book}
    % \usepackage{blah, blah} as you wish
    
    \graphicspath{ {./figs/}
    
    \begin{document}
    \SweaveOpts{concordance=TRUE}
    
    \include{intro} % a call to 'intro.Rnw'
    \include{matmet} % a call to 'matmet.Rnw'
    \include{results} % a call to 'results.Rnw'
    \include{discuss} % a call to 'discuss.Rnw'
    
    \end{document}
    

    2)创建子文件。我只给这里第一个, RNW . 请注意,在子文件中, 不要使用 前导命令,如 \documentclass \begin{document}

    \chapter{Introduction}\label{ch:intro}
    \section{This is section 01}
    In section 01 we are concerned about whether \texttt{Sexpr} could possibly work. The chunk below creates a variable \em{a} which will be referred to by this command later on.
    
    <<>>=
    a <- 1+2
    @
    
    Ok, if it is working, we shall see number 3 right here: \Sexpr{a}.
    

    3)在“intro.rnw”中保存修改后,只需转到“master.rnw”并使用ctrl+shift+k编译它,然后……VoRe:

    Screenshot of the file created by the above command.

    推荐文章