code

git + LaTeX 워크플로우

starcafe 2023. 5. 23. 22:03
반응형

git + LaTeX 워크플로우

저는 LaTeX에서 매우 긴 문서를 작성하고 있습니다.저는 제 업무용 컴퓨터와 노트북을 가지고 있고, 둘 다 작업합니다.두 컴퓨터 간에 모든 파일을 동기화하고 수정 내역을 유지해야 합니다.Git을 DVCS로 선택하고 서버에 저장소를 호스팅하고 있습니다.저도 Kile + Okular를 사용하여 편집하고 있습니다.Kile에는 내장된 Git 플러그인이 없습니다.저는 또한 이 텍스트에 대해 누구와도 협력하지 않습니다.서버에 어떤 이유로 접근할 수 없는 경우 다른 개인 저장소를 코드셋에 추가하는 것도 고려 중입니다.

이 경우 권장되는 워크플로우 방법은 무엇입니까?이 작업 계획에서 분기를 어떻게 장착할 수 있습니까?동일한 파일의 두 버전을 비교할 수 있는 방법이 있습니까?저장고를 사용하는 건 어때요?

LaTeX 워크플로우의 변경 사항:

Git+LaTeX 워크플로우를 효율적으로 관리하기 위한 첫 번째 단계는 LaTeX 습관을 몇 가지 변경하는 것입니다.

  • 우선, 각각의 문장을 별도의 줄에 쓰세요.Git는 버전 제어 소스 코드에 작성되었으며, 각 행은 고유하고 특정 목적을 가지고 있습니다.LaTeX에서 문서를 작성할 때 문단을 고려하여 자유롭게 흐르는 문서로 작성하는 경우가 많습니다.그러나 git에서는 한 문단의 한 단어에 대한 변경사항이 전체 문단에 대한 변경사항으로 기록됩니다.

    한 가지 해결책은 다음과 같습니다.git diff --color-words(텍스트 문서의 버전 제어를 위해 Mercurial을 사용하는 방법에 대한 비슷한 질문에 대한 내 대답을 참조하십시오.예를 들어 설명합니다.).그러나 병합 충돌을 최소화하는 것으로 나타났기 때문에 별도의 줄로 분할하는 것이 훨씬 더 나은 옵션임을 강조해야 합니다(해당 답변에서 언급했을 뿐입니다).

  • 코드 diff를 확인해야 할 경우 Git의 네이티브 diff를 사용합니다.커밋)의 를 .sha각 커밋의 s.자세한 내용은 설명서를 참조하고 두 의 개정판 사이에 변경된 파일 표시를 참조하십시오.

    반면에 포맷된 출력의 차이를 확인해야 하는 경우에는 두 개의 라텍스 파일을 사용하여 다음과 같은 PDF 형식의 깔끔한 디퓨전 출력(이미지 소스)을 생성하는 우수한 유틸리티(perl로 작성)를 사용하십시오.

    할합수있다니습결다를 조합할 수 .git그리고.latexdiff(플러스)latexpand필요한 경우)를 git-transmitdiff(예: git-transmitdiff)를 사용하는 단일 명령으로 실행합니다git latexdiff HEAD^작업 트리와 마지막 버튼 하나의 커밋 간의 차이를 확인합니다.

  • 만약 당신이 LaTeX에서 긴 문서를 작성하고 있다면, 저는 다른 장들을 그들 자신의 파일로 나누고, 그것들을 사용하여 메인 파일로 부르는 것을 제안합니다.\include{file}지권휘 하면 하는 것이 더 , 각 할 필요 .이렇게 하면 작업의 지역화된 부분을 쉽게 편집할 수 있으며, 각 장에서 변경된 내용을 하나의 큰 파일의 로그에서 확인할 필요 없이 버전 제어도 쉬워집니다.

Git의 효율적인 사용:

  • 가지를 사용합니다!이보다 더 좋은 조언은 없을 것입니다.저는 분기가 텍스트 또는 작업의 "다른 상태"에 대한 "다른 아이디어"를 추적하는 데 매우 유용하다는 것을 알게 되었습니다.master브랜치는 가장 최근의 "출판 준비 완료" 상태에서 당신의 주요 작업 본문이어야 합니다. 즉, 모든 브랜치 중에서 당신의 이름을 붙일 의향이 있는 브랜치가 있다면 그것은 마스터 브랜치여야 합니다.

    여러분이 대학원생이라면 나뭇가지도 매우 도움이 됩니다.대학원생이라면 누구나 증언하겠지만, 지도교수는 여러분이 동의하지 않는 많은 수정 사항을 가지고 있을 것입니다.그러나 논의를 거쳐 나중에 되돌리더라도 적어도 당분간은 변경이 예상될 수 있습니다.따라서 이러한 경우에는 새 분기를 생성할 수 있습니다.advisor자신의 개발 지점을 유지하는 동시에 자신의 취향에 맞게 변경할 수 있습니다.그런 다음 둘을 병합하고 체리가 필요한 것을 선택할 수 있습니다.

  • 또한 각 섹션을 다른 분기로 나누고 현재 사용 중인 분기에 해당하는 섹션에만 초점을 맞추는 것이 좋습니다.새 섹션 또는 더미 섹션을 작성할 때 분기를 생성합니다(실제 선택 사항).분기에 없을 때 다른 섹션(예: 3)을 편집하고 싶은 충동을 억제합니다.편집해야 하는 경우 분기하기 전에 이 항목을 커밋한 다음 다른 항목을 체크아웃합니다.이것은 섹션의 기록을 고유한 분기에 보관하고 일부 섹션의 오래된 상태를 한눈에 알 수 있기 때문에 매우 유용합니다.섹션 3에 섹션 5로 수정해야 하는 자료를 추가했을 수도 있습니다. 물론 이러한 내용은 주의 깊게 읽는 동안 확인할 수 있지만, 섹션이 지루할 때 기어를 전환할 수 있도록 한 눈에 확인하는 것이 도움이 됩니다.

    다음은 최근 논문의 분기 및 병합 예제입니다(OS X에서는 SourceTree를 사용하고 Linux에서는 명령줄에서 Git를 사용합니다).여러분은 아마 제가 세계에서 가장 자주 하는 사람이 아니라는 것을 알아차릴 것이고 항상 유용한 논평을 남기지 않을 것이지만, 그것이 여러분이 그러한 좋은 습관을 따르지 않을 이유는 아닙니다.주요 메시지는 지점에서 일하는 것이 도움이 된다는 것입니다.제 생각, 아이디어 및 개발은 비선형적으로 진행되지만, 분기를 통해 추적하고 만족할 때 병합할 수 있습니다(나중에 삭제된 다른 분기도 있었습니다).또한 커밋이 의미하는 바가 있는 경우(예: 저널에 초기 제출/수정된 제출 등) 커밋에 "태그"할 수 있습니다.여기서, 저는 그것을 "버전 1"에 태그를 붙였고, 그것은 현재 초안이 있는 곳입니다.그 나무는 일주일 동안의 일을 나타냅니다.

  • 다른 유용한 작업은 문서 전체를 변경하는 것입니다(예: 변경).\alpha\beta어디서나) 스스로 범죄를 저지릅니다.이렇게 하면 다른 것을 롤백하지 않고도 변경 사항을 되돌릴 수 있습니다(git을 사용하여 이 작업을 수행할 수 있는 방법도 있지만, 사용자가 피할 수 있다면 변경 사항을 되돌릴 수도 있습니다).서문에 추가된 것도 마찬가지입니다.

  • 원격 repo를 사용하고 변경사항을 정기적으로 업스트림에 푸시합니다.GitHub 및 Bitbucket과 같은 무료 서비스 공급자(둘 다 무료 계정으로 개인 저장소를 만들 수 있음)와 함께 Git/Mercurial을 사용하고 있다면 이러한 서비스를 사용하지 않을 이유가 없습니다.적어도 LaTeX 파일에 대한 보조 백업(기본 백업이 있기를 바랍니다!)과 다른 시스템에서 떠난 위치에서 편집을 계속할 수 있는 서비스로 간주하십시오.

저도 비슷한 작업 흐름을 가지고 있습니다.한 번에 하나의 지사를 운영하고 있지만, 업무 상태에 따라 별도의 지사를 운영하는 것이 유리하다고 생각합니다.예를 들어, 여러분의 논문의 좋은 초안을 여러분의 조언자에게 보낸다고 상상해 보세요.그러면, 여러분은 이상한 생각을 하게 됩니다!몇 가지 핵심 개념을 변경하고 몇 가지 주요 섹션을 다시 작업하는 등의 작업을 시작하려고 합니다.그래서 당신은 분기해서 일을 시작합니다.마스터 분기는 항상 "해제 가능" 상태에 있습니다(또는 해당 시점에서 가장 가까운 상태).따라서 다른 지점이 비정상적이고 몇 가지 급격한 변화를 겪고 있지만, 다른 게시자가 사용자가 가지고 있는 내용을 보기를 원하거나 학생이 컨퍼런스에 참석하는 경우 마스터 지점은 언제든지 공개할 수 있고 준비가 되어 있습니다(또는 조언자에게 보여줄 준비가 되어 있습니다).박사 어드바이저가 아침에 초안을 먼저 보고 싶다면, 현재 변경 사항을 저장/스테이지/커밋하고, 태그를 사용하거나 로그를 검색할 수 있지만, 별도의 지점을 유지하는 것은 어떨까요?!

마스터 분기에 작업의 "해제 가능" 상태가 있다고 가정해 보겠습니다.이제 여러 동료 검토 저널에 제출하려고 합니다. 각 저널은 동일한 콘텐츠에 대해 서로 다른 포맷 요구 사항을 가지고 있으며, 독자에게 맞게 논문을 편집하는 방법 등에 대해 여러 가지 작은 비판을 제기할 것으로 예상됩니다.각 저널에 대한 분기를 쉽게 만들고, 저널별로 변경하고, 제출하고, 피드백을 받으면 각 분기에서 변경할 수 있습니다.

저는 또한 Dropbox와 git을 사용하여 위에서 설명한 시스템을 만들었습니다.드롭박스 폴더에 베어본 저장소를 생성할 수 있습니다.그런 다음 두 컴퓨터 중 하나에서 드롭박스로 푸시/풀하여 모든 엔드에서 최신 상태를 유지할 수 있습니다.이 시스템은 일반적으로 사람들이 동시에 드롭박스 레포를 진행하려고 하면 부패의 가능성이 있기 때문에 협력자의 수가 적을 때만 작동합니다.

또한 기술적으로 드롭박스 폴더 안에 하나의 리포지토리를 보관하고 거기서 모든 작업을 수행할 수 있습니다.하지만 사람들이 Dropbox가 지속적으로 변경되는 파일(내부 파일 포함)을 동기화하는 데 문제가 있다고 언급했기 때문에 이는 바람직하지 않습니다.

나는 이것을 bash 기능으로 구현하려고 노력했고, 나는 그것을 나의 것에 포함시켰습니다.~/.bashrc항상 사용할 수 있도록 합니다.

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설치해야 합니다(경로에서 확인할 수 있습니다). 찾는 것도 합니다.pdflatex그리고.okular.

첫 번째는 LaTeX를 처리하는 제가 선호하는 방법입니다. 그래서 당신은 그것을 다음으로 바꿀 수 있습니다.latex는 제 입니다. PDF 리더기를 보세요. 사용하고 싶으실 겁니다.evince어떤 해결책 아래에, 또는 어떤 다른 해결책.

이것은 단일 문서를 염두에 두고 만든 빠른 버전이며, Git를 사용하면 다중 파일 LaTeX 문서를 추적하는 데 많은 시간과 노력이 손실되기 때문입니다.이 작업을 git가 수행하도록 할 수도 있지만, 원하는 경우 계속 사용할 수도 있습니다.\include

이것은 당신이 윈도우에 있을 때, 할부 없이, 단지 간단한 버전 차이에 사용합니다.bat스크립트 윈도우10, 마이크텍스2에서 완벽하게 작동합니다.9:

https://github.com/redreamality/git-latexdiff

언급URL : https://stackoverflow.com/questions/6188780/git-latex-workflow

반응형