推荐的乳胶构建系统?

时间:2009-08-06 16:26:39

标签: latex makefile

我正在努力找出乳胶的最佳构建系统。

目前,我使用latex-makefile,在vim中进行编辑,以及查看Okular或gv中的更改。主要问题是它有时会让我隐藏错误,我必须手动运行乳胶。主要优点是它完成了我需要的所有迭代,并且简单地提供了pdf和ps。

如果您有使用

的经验
  • 胶乳-MK
  • VIM-胶乳
  • 的kile
  • LYX
  • 是MiKTEX
  • 胶乳生成文件
  • 终极乳胶制作文件
  • 橡胶
  • 我没见过的任何其他人

你会推荐它们,为什么/为什么不推荐?

15 个答案:

答案 0 :(得分:21)

我刚尝试过latexmk。如果你这样做

latexmk -pvc file.tex 

然后它将自动预览(默认为DVI)。

  • 处理依赖关系
  • DVI,ps或pdf
  • 迭代罚款。
  • 非常易于配置,请参阅man latexmk

缺点:

  • 它不会压缩错误,这不是非常有用(解决方法:单独使用橡胶信息)
  • man文件中的错误:“有时查看器(gv)会在创建文件创建后但在文件完成之前尝试读取更新的.ps或.pdf文件。解决方法:手动刷新(或重新打开)显示。 ”。如果通过临时的.pdf文件构建它来避免这种情况会更好。
  • 用户不太友好。

答案 1 :(得分:10)

我自己没有用过,但我听说Rubber是一个不错的选择。

从他们的网站:

  

橡胶是一个旨在实现的计划   处理与之相关的所有任务   编辑LaTeX文档。这个   包括编译文档   当然,这本身就足够了   所有引用都已定义,并且   运行BibTeX来管理书目   引用。自动执行   dvips生成PostScript文档   也包括在内,以及使用   pdfLaTeX生成PDF文档。

答案 2 :(得分:10)

在考虑了所有这些选项一段时间之后,我已经解决了以下问题。

  • Set vim to write continuously as I type
  • 在后台运行脚本以持续构建,随时刷新pdf。 latexmk几乎已经足够好了,除了它构建到位,在okular(我的观察者)中的一个糟糕的时间重新加载。

该脚本位于https://github.com/pbiggar/texbuild

使用rubber-info从日志文件中获取错误和警告。上面的脚本将日志文件保存在t.log中。在vim:

autocmd FileType tex set makeprg=rubber-info\ t.log
autocmd FileType tex set errorformat=%f:%l:\ %m

答案 3 :(得分:9)

好的,所以这个问题有点老了,但是当我搜索“乳胶构建系统”时它出现了,所以我想我会加两分钱。我尝试了基于Makefile的解决方案,但发现输出有点冗长和笨拙。我想有人可能已经建立了乳胶的scons扩展,但是惊喜地发现scons已经原生支持乳胶了!您需要做的就是创建一个SConsctruct文件,如下所示:

env = Environment()  
env.PDF(target="report.pdf", source="report.tex")

要构建只运行scons report.pdf。 Scons将自动构建report.tex包含的.tex文件,处理参考书目并执行重复构建以解决所有引用 - 简单!

您可以以相同的方式创建DVI和PS文件。有关这些构建器的更多信息,请查看http://www.scons.org/doc/2.0.1/HTML/scons-user/a8524.html

有关scons(更换品牌)的更多信息,请参阅http://www.scons.org/

答案 4 :(得分:5)

我使用Eclipse和TexEcplise插件来编辑我的TeX文件。它具有LaTeX的语法高亮。当您询问未更改且已编译的tex文件的预览时,它会在查看器中打开该文件。当tex文件被更改时,它会在查看之前编译tex文件。它进行必要的迭代,但仅在需要时进行。

另一个优点是所有错误和警告都汇总在一个框中,并在tex文件中突出显示!这是screenshot主页中的TexEclipse

答案 5 :(得分:5)

我在Scons上使用tex.stackexchange发布了详细答案。

基本上,你把它放在一个名为SConstruct的文件中:

# make sure scons finds tex executables:
import os
env = Environment(ENV=os.environ)
# target and source:
pdf_output = env.PDF(target='main.pdf', source='main.tex')
# make sure that the pdf is reloaded properly (e.g., in Skim)
env.Precious(pdf_output)

您只需运行

即可构建pdf
scons

令人惊讶,scons将检测main.tex文件中包含的文件\以及参考书目文件中的更改!

答案 6 :(得分:4)

我正在尝试橡胶一段时间。我会在这里压缩结果:

  • Rubber会自动将.eps文件转换为.pdfs,用于pfdlatex。但是,似乎只对includegraphics宏执行此操作。如果你有自己的宏,它就不会。
  • rubber-info很棒,这很神奇。它肯定比我在获取错误消息和行时看到的任何其他内容更好。而且你实际上并不需要使用橡胶来构建它来使用它。
  • 似乎不知道何时停止迭代,通常会提前停止。
  • 它会在构建时覆盖你的PDF,这很烦人(它缺少一个很好的功能,来自latex-makefile,它在一个临时文件中构建它)。

答案 7 :(得分:2)

我想使用您在final answer中发布的脚本。

不幸的是,它不适合我的设置(MacVim使用vim-latexsuite,Skim作为查看器和XeTeX)。我也使用向前搜索(即我使用在Vim中按 \ ls 的功能将跳转到打开的查看器中PDF文档中的相应点。)

此外,我的文件不称为thesis.tex(大惊喜;它不是论文)。因此,我做了一些我想分享的配置工作。注意,我的bash技能太可怕了。

#!/bin/bash

set -x
ulimit -t 10 # sometimes pdflatex gets stuck

if [ "$1" = "" ]; then
    echo "No target name specified"
    exit 1
fi

TARGET=$1
SOURCE=$1.tex
TMPSOURCE=_$TARGET.tex
TMPTARGET=_$TARGET

while [ 1 ]; do
    # Compile a different file ($TMPSOURCE.pdf) so that it doesn't reload mid-compile
    cp $SOURCE $TMPSOURCE
    # better than running pdflatex manually, as this wont rebuild if there's nothing there.
    latexmk -pdf -silent $TMPTARGET > /dev/null

    # For rubber-info
    cp $TMPTARGET.log $TARGET.log

    if [ -e $TMPTARGET.pdf ]; then # Check the compile succeeded first
        # No output file yet.
        [ ! -e $TARGET.pdf ]
        HASNOPDF=$?
        # ignore if it's unchanged.
        # OS X diff doesn't consider binary files. Single-line output, return value 2
        diff $TARGET.pdf $TMPTARGET.pdf
        OUTPUTDIFFERS=$?
        if [ $HASNOPDF -eq 0 -o $OUTPUTDIFFERS -ne 0 ]; then
            # Do NOT RM since Skim cannot deal with this.
            cp $TMPTARGET.pdf $TARGET.pdf
        fi
    fi

    sleep 1 # give it time to be killed by a CTRL-C
done

这会编译一个临时文件并将其复制回给定的任何名称(而不是像脚本那样反过来);脚本的用法:

./scriptname project

其中project是TeX文件的名称,没有文件扩展名。

我还更改了rubber-info行:

autocmd FileType tex exe "set makeprg=rubber-info\\ _" . expand("%:t:r") . ".log"

我需要修补我的latexmk以使用XeTeX,因为可执行文件的名称是硬编码的。

不幸的是,当我在完成声明之前保存我的文档时,这仍会破坏输出PDF文件,因为latexmk似乎总是生成PDF文件,即使出现错误 - 它的返回码总是0,这很糟糕。

(为了澄清这一点,说我刚刚在我的文档中输入emph{并保存它。后台脚本将立即编译文档,然后失败。但它仍然会产生一个(基本上是空的)输出文件)。

此外,前向搜索不再正常;它基本上跳到文档中的错误点。我怀疑这与我在编译之前复制文档有关。

所以,这仍然是一个完全不能令人满意的解决方案,即使我甚至没有在MacVim上打字时连续保存。

答案 8 :(得分:1)

(这是一项正在进行的工作)

我正在尝试vim-latexsuite。它基本上将vim变成了乳胶的IDE。

学习曲线:

  • 非常不直观,但在教程之后,似乎没问题。
  • 它重新定义了我喜欢的一些键,我似乎无法修复它们。

自动完成:

  • 使用一些内置宏更简单
  • 添加<< +>>对于用户宏来说非常烦人。
  • 用“和”之类的代替是很好的,直到你想要“出于某种原因,然后这是一种令人沮丧的运动。”
  • 它的自动完成功能也很烦人。我必须为乳胶工作重新编程。

构建系统:

  • 可怕
  • quickfix不起作用 - 它经常把我放在错误的文件中
  • 当latex报告错误,结果分成2行时,它不会检测到它。

答案 9 :(得分:1)

AUCTEX&预览乳胶与Emacs的另一种选择。

您也可以让emacs打开生成的dvi或pdf文件,如果为该缓冲区启用自动恢复模式,则每次重新编译文档时都会呈现更改。

答案 10 :(得分:0)

“更好”是一个非常相对的术语......你还想做什么?看起来这个makefile处理得相当多,而且它让我希望我在工作中运行* nix而不是windows ...如果有更多的东西你需要用makefile来处理,为什么不加入呢?

为了让它“更好”,您需要提供有关您正在做什么的更多详细信息。

例如,您可以使用grep解析.log文件,搜索错误或警告,将它们转储到另一个文件中,然后打开新文件以便您可以读取错误。

这完全取决于你想做什么......

答案 11 :(得分:0)

我一直在使用latex-makefile一段时间。如果您尝试使用编辑 - 编译 - 预览周期,那就非常好了:

  • 几乎为零配置。
  • 构建.ps或.pdf。
  • 处理所有必要的迭代。我真的不得不写别的东西。
  • 非常强大,但偶尔会出现错误和警告错误。
  • 在构建新的pdf之前,它不会删除旧的pdf。
  • 它构建其他文件,例如从gnuplot生成eps。我发现这个非常有用。
  • 作者可以快速回复功能请求。
  • 我可以很容易地复制latexmk的优点:

    while [ 1 ]; do /usr/bin/make; done
    

一些缺点:

  • 它只允许通过dvi生成pdf - > ps - > pdf,而不是直接通过pdftex。
  • 其错误输出与标准乳胶输出不同,因此vim没有移动到正确的行。
  • 它并不总是重新编译bibtex和其他非tex源的变化。
  • 如果我删除了一个文件,它就不会在没有make clean的情况下删除依赖项。

答案 12 :(得分:0)

我正在将MikTeX与TeXnicCenter结合使用。它适用于我的目的。我从来没有让系统隐藏错误或警告。自定义构建脚本易于创建和配置。

答案 13 :(得分:0)

ltx声称是乳胶的包装,以加快乳胶文件的编制。我不能让它工作(initex的一些问题)。

答案 14 :(得分:0)

看看TeXMaker。 : - )

功能(来自wiki):

  
      
  • 在线拼写检查。
  •   
  • 用于编写LaTeX源文件的unicode编辑器(语法高亮,   undo-redo,search-replace,spell   检查器...)
  •   
  • 可以使用鼠标输入LaTeX标签和数学符号
  •   
  • 文档和部分模板
  •   
  • 可以启动与LaTeX相关的程序
  •   
  • BibTeX数据库管理
  •   
  • 大纲或“结构视图”
  •   
  • LaTeX编译期间的日志文件以及“单步执行”的能力   发现的源错误   编译器
  •   
  • 集成的LaTeX到HTML转换工具
  •   

功能(来自我):

  
      
  • 用于插入表格,引用,引用的有用向导
  •   
  • 双向支持
  •   
  • 有用的键盘快捷键
  •   
  • 自动完成单词(特别适用于引用)
  •   
  • 定义您自己的说明
  •