首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git + LaTeX工作流

git + LaTeX工作流
EN

Stack Overflow用户
提问于 2011-05-31 22:03:57
回答 4查看 90.3K关注 0票数 289

我正在用LaTeX写一个很长的文档。我有我的工作电脑和笔记本电脑,我都在工作。我需要保持两台计算机之间的所有文件同步,并希望保留修订历史记录。我选择git作为我的DVCS,并且在我的服务器上托管我的存储库。我还使用Kile + Okular进行编辑。Kile没有集成的git插件。我也不会在这篇文章上与任何人合作。如果我的服务器由于某种原因无法访问,我也在考虑在codaset上放置另一个私有存储库。

在这种情况下,推荐的工作流程实践是什么?分支如何适用于此工作方案?有没有办法比较同一文件的两个版本?那使用隐藏库呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-01 00:09:29

对LaTeX工作流的更改:

有效管理Git+LaTeX工作流的第一步是对您的LaTeX习惯进行一些更改。

  • 对于初学者来说,把每句话写在单独的一行上。Git是为版本控制源代码编写的,其中每一行都是不同的,并具有特定的用途。当您在LaTeX中编写文档时,您通常会根据段落进行思考,并将其作为一个自由流动的文档来编写。然而,在git中,对段落中单个单词的更改会记录为对整个段落的更改。

一种解决方案是使用git diff --color-words (请参阅我对类似问题How to use Mercurial for version control of text documents?的回答,其中我给出了一个示例)。然而,我必须强调,拆分成单独的行是一个更好的选择(我在回答中只是顺便提到了它),因为我发现它可以产生非常小的合并冲突。

如果您需要查看代码比较,请使用的原生

另一方面,如果您需要查看格式化输出的差异,可以使用pdf,这是一个优秀的实用程序(用perl编写),它采用两个latex文件并以(image source):格式生成整齐的差异输出( latexdiff

您可以使用git-latexdiff在单个命令中组合gitlatexdiff (如果需要,还可以使用latexpand )(例如,使用git latexdiff HEAD^查看工作树和倒数第二次提交之间的差异)。

  • 如果你正在用LaTeX写一个很长的文档,我建议你使用splitting different chapters into their own files,并使用\include{file}命令在主文件中调用它们。这样,您可以更轻松地编辑工作的本地化部分,也可以更轻松地进行版本控制,因为您知道每个章节都做了哪些更改,而不必从一个大文件的日志中找出它。

高效使用Git:

  • Use分支!。也许我不能给你更好的建议。我发现分支非常有助于跟踪文本的“不同想法”或工作的“不同状态”。master分支应该是您的工作主体,处于其最新的“准备发布”状态,也就是说,如果在所有分支中,如果有一个分支您愿意将您的名字放在上面,那么它应该是主分支。

如果你是研究生,分支也是非常有用的。正如任何研究生都会证明的那样,导师肯定会有许多更正,其中大多数是你不同意的。然而,你可能会被期望至少暂时改变它们,即使它们在讨论之后被恢复。因此,在这种情况下,您可以创建一个新的分支advisor并根据他们的喜好进行更改,同时维护您自己的开发分支。然后你可以将两者合并,然后挑选你需要的。

  • ,我还建议将每个部分分成不同的分支,只关注与您所在分支对应的部分。当你创建一个新的区段时产生一个分支,或者在你进行初始提交时产生一个虚拟区段(实际上是你的选择)。当你不在它的分支上时,克制住编辑一个不同部分(比如3个)的冲动。如果您需要编辑,请提交此文件,然后在分支之前签出另一个。我发现这非常有用,因为它将该部分的历史记录保存在它自己的分支中,并且还可以(从树中)一目了然地告诉你某个部分有多老。也许您已经在第3节添加了需要调整到第5节…的内容当然,在仔细阅读的过程中很可能会注意到这些,但我发现一目了然是很有帮助的,这样如果我对某个部分感到厌烦,我就可以换个方向。

下面是我最近一篇论文中的分支和合并示例(我在OS上使用SourceTree,在Linux上从命令行使用Git )。您可能会注意到,我不是世界上最频繁的提交者,也不会总是留下有用的评论,但这不是您不遵循这些好习惯的理由。主要的外卖信息是在分支机构工作是有帮助的。我的想法、想法和开发是非线性进行的,但我可以通过分支来跟踪它们,并在我满意时将它们合并(我也有其他分支没有什么结果,后来被删除了)。如果提交意味着什么(例如,对期刊的初始提交/修改后的提交/等等),我也可以“标记”提交。在这里,我将其标记为“版本1",这就是到目前为止草案所在的位置。这棵树代表了一周的工作。

  • 要做的另一件有用的事情是自己进行文档范围的更改(例如将\alpha更改为\beta everywhere)。这样,您可以恢复更改,而不必回滚其他内容(使用git可以做到这一点,但是,如果您可以避免这种情况,为什么不呢?)。前言中的补充内容也是如此。

  • 使用远程存储库,并定期向上游推送您的更改。有了像GitHub和Bitbucket这样的免费服务提供商(两者都允许你用免费账户创建私人repos ),如果你正在使用Git/Mercurial,就没有理由不使用它们。至少,将其视为辅助备份(我希望您有主备份!)用于您的LaTeX文件和一项服务,该服务允许您从离开另一台计算机的位置继续编辑。
票数 419
EN

Stack Overflow用户

发布于 2011-05-31 22:28:21

我也有类似的工作流程。尽管一次只处理一个分支,但我发现对于不同的工作状态有单独的分支是有益的。例如,想象一下把你的论文的一份很好的草稿发送给你的导师。然后,你会有一个疯狂的想法!你想要开始改变一些核心概念,重新设计一些主要的部分,等等,所以你分支并开始工作。您的主分支始终处于“可发布”状态(或者与您所处的状态尽可能接近)。因此,当你的另一个分支疯狂并有一些剧烈的变化时,如果另一个出版商想看看你有什么,或者你是一个正在提交会议的学生,主分支总是可以发布的,准备好去(或者准备展示给你的导师)。如果你的PhD顾问想要在早上的第一件事上看到草稿,是的,你可以保存/暂存/提交你当前的更改,使用标签或搜索日志,但为什么不保留单独的分支呢?!

假设您的主分支具有您的工作的“可发布”状态。现在,您希望将其提交给多个同行评审的期刊,每个期刊对相同的内容有不同的格式要求,并且您希望它们返回一些关于如何编辑论文以适应其读者的不同小批评,等等。您可以轻松地为每个期刊创建一个分支,对期刊进行特定的更改,然后在收到反馈时对每个单独的分支进行更改。

我还使用了Dropbox和git来创建您上面描述的系统。您可以在dropbox文件夹中创建一个基本存储库。然后你可以从任何一台电脑推送/拉取到你的dropbox,以保持所有终端的最新状态。这个系统通常只有在合作者数量很少的情况下才起作用,因为如果人们试图同时推送到dropbox repo,就有可能发生腐败。

从技术上讲,您也可以只在dropbox文件夹中保留一个存储库,然后从那里执行所有工作。然而,我不鼓励这样做,因为人们已经提到,dropbox在同步不断变化的文件(gits内部文件)时遇到了一些问题。

票数 14
EN

Stack Overflow用户

发布于 2012-06-02 08:54:53

我试着将它作为一个bash函数来实现,我已经将它包含在我的~/.bashrc中,以使它始终可用。

代码语言:javascript
复制
function git-latexdiff {    
    if [[ $# != 2 ]];    
    then      
        printf "\tusage: git-latexdiff <file> <back-revision>  \n";    
    elif [[ $2 -lt 0 ]];     
    then     
        printf "\t<Back-revision> must be positive\n";   
    else      
        dire=$(dirname $PWD/$1);      
        based=$(git rev-parse --show-toplevel);      
        git show HEAD~$2:$(echo $dire| sed 's!'$(echo $based)'/!!')/$1 > $1_diff.tmp;      
        latexdiff $1 $1_diff.tmp > $1_diff.tex;      
        pdflatex $1_diff.tex;     
        okular $1_diff.pdf;      
        rm $1_diff*;   
    fi; 
}

请注意,此函数需要安装latexdiff (并且可以在路径中找到)。对它来说,找到pdflatexokular也很重要。

第一种方法是我首选的处理LaTeX的方法,因此您也可以将其更改为latex。第二个是我的PDF阅读器,我想你可能想在gnome下使用evince,或者其他一些解决方案。

这是一个快速的版本,只考虑到一个文档,这是因为使用git,您将会浪费大量的时间和精力来跟踪多个文件的LaTeX文档。你也可以让git来完成这个任务,但是如果你愿意,你也可以继续使用\include

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

https://stackoverflow.com/questions/6188780

复制
相关文章

相似问题

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