Latex 파일을 컴파일하는 스크립트

Latex 파일을 컴파일하는 스크립트

Latex 터미널을 컴파일하는 데 사용하는 명령은 다음과 같습니다.

$latex <file>.tex
$dvips -Go -ta4 -Ppdf <file>.div
$ps2pdf <file>.ps

내가 원하는 것은 $./ltx <file>.tex위에 나열된 모든 명령을 실행하고 필요한 경우 .tex확장자를 및로 변경하는 스크립트를 만드는 것입니다..div.ps

어떻게 해야 하며, 앞으로 이런 일을 하는 방법을 알기 위해 무엇을 배워야 합니까?

답변1

다음을 다음과 같이 저장합니다 ltx.

#!/bin/sh

latex $1.tex
dvips -Go -ta4 -Ppdf $1.dvi
ps2pdf $1.ps

실행 가능하게 만들어라chmod 755 ltx

구경하다배쉬 스크립트스크립트를 만드는 방법.

편집: Kalvin Lee의 제안(아래 설명): 스크립트를 어디에서나 사용할 수 있도록 하려면 경로의 디렉터리에 복사하세요. 가장 적합한 위치는 입니다 /usr/local/bin.

답변2

향후 작업에 대한 추가 관점을 제공하기 위해 다른 답변을 입력하겠습니다.

귀하의 질문 중 일부는 다음과 같습니다

다음과 같이 실행 $./ltx <file>.tex...

이는 ( ./구문에 따라) ltx 스크립트가 현재 디렉터리에 존재한다는 것을 의미합니다. IMHO 이것은 아마도 다음 주에 다른 디렉터리에 있는 일부 다른 파일을 처리하려고 하기 때문에 인위적인 제한 사항입니다.

쉘 스크립트를 작성하는 것은 이 문제에 대한 확실한 해결책입니다. 여러 명령이 항상 함께 연결되어 있고 새 포스트스크립트 파일을 생성할 때마다 명령을 입력하고 싶지는 않습니다. 잭 펜스보여주다이를 수행하는 방법은 한 논평자가 지적했듯이 이 쉘 스크립트를 보다 중앙 위치(?)에 배치 하고 디렉터리를 포함하도록 ~/bin업데이트하여 file.tex가 있는 곳 어디든 입력하면 원하는 작업을 수행할 수 있다는 것입니다. 원하다.$PATHltx file.tex

또 다른 옵션은 별칭을 만드는 것입니다. 하지만 별칭은 명령의 첫 번째 단어인 경우에만 셸에서 별칭을 확장하고 전달된 인수는 두 번 이상 참조할 수 없기 때문에 제한됩니다(단지 별칭 텍스트에 추가됨).

또 다른 옵션은 함수를 만드는 것입니다. 함수는 셸의 시작 파일에서 정의할 수 있으므로 파일을 수정할 필요가 없으며 $PATH현재 있는 모든 디렉터리에서 실행할 수 있습니다.

원하는 작업을 수행하는 첫 번째 초안은 다음과 같습니다.

function ltx() {
  latex "$1" && \
    dvips -Go -ta4 -Ppdf "${1%.tex}.div" && \
      ps2pdf "${1%.tex}.ps"
}

초기 명령에 두 가지 주요 수정 사항과 한 가지 사소한 조정 사항을 적용했습니다.

  1. 줄 끝에 "이전 명령이 성공적으로 반환된 경우에만 다음 명령을 실행하십시오."라는 기호를 추가했습니다 . 이는 &&지정한 file.tex가 존재하지 않거나 명령이 실패한 경우에 latex작동합니다 . 어떤 이유 추가 오류를 저장하세요. 줄의 마지막 문자는 \다음 줄이 현재 줄의 일부(연속)로 간주되어야 함을 쉘에 알려줍니다. 이 경우 쉘은 &&이를 따르기 위해 다른 명령이 필요하다고 생각하기 때문에 꼭 필요한 것은 아닙니다 . 나는 의도가 이 두 줄(또는 줄)을 함께 묶는 것임을 더욱 분명하게 하기 위해 내가 작성하는 스크립트에 이것을 포함시키는 것을 좋아합니다. 또한 더 명확하게 하기 위해 다음 줄을 들여쓰기했습니다.

  2. 첫 번째 호출에서 으로 변경 하고 bash를 사용했습니다 file.tex.$1매개변수 확장file.tex다음 호출에서 함수에 전달한 것을 참조하려면 .tex확장을 제거하여 다시 추가 .div하거나 .ps확장에 추가하세요.

  3. file with spaces.tex또한 원하는 대로 파일 이름을 지정할 수 있도록 변수 확장도 포함시켰 으며 쉘은 모든 명령에서 파일 이름을 유지합니다.

이 기능의 첫 번째 초안은 작동하지만, 수행할 몇 가지 추가 단계를 지적하겠습니다.

function ltx() {
  [ -r "$1" ] || return 1
  [[ $1 =~ .tex$ ]] || return 2
  echo latex "$1" &&
    dvips -Go -ta4 -Ppdf "${1%.tex}.div" &&
      ps2pdf "${1%.tex}.ps"
}

첫 번째 새로운 추가 라인은 전달한 매개변수가 실제로 존재하고 읽을 수 있는지 확인합니다. 그렇지 않은 경우 함수는 반환 코드가 1인 다른 명령을 호출하지 않고 반환됩니다. 이 테스트를 변경하여 다른 것을 출력하거나( That file does not exist, please try something else) 완전히 그대로 두고 Latex 명령이 누락된 입력 파일에 대한 오류를 제공한다는 것을 알 수 있습니다.

두 번째 추가 줄은 bash에만 해당되며 전달한 인수가 string 으로 끝나는지 확인합니다 .tex. 후속 명령에 이러한 파일이 필요하고 매개변수 확장을 시도하기 때문에 이 파일을 추가합니다.제거하다이러한 확장이므로 를 호출하면 ltx somefile수정된 함수는 종료 코드 2를 반환하고 Latex를 호출하지 않습니다.

질문의 마지막 부분은 다음과 같습니다.

미래에 이런 일을 할 수 있으려면 무엇을 배워야 합니까?

나는 당신이 올바른 길을 가고 있다고 생각합니다. 쉘 스크립트(또는 다른 것)로 해결할 수 있다고 생각하는 실제 문제가 있습니다. 당신은 이러한 것들을 이해하고 같은 생각을 가진 사람들이 있는 U&L 환경에 들어왔습니다. 또한 이 사이트에는 다양한 사람들의 특정 문제를 해결하는 수천 개의 유사한 질문과 답변이 있습니다.

유사한 질문에 대한 다른 답변을 조사합니다.,, 그리고(원래 태그한 대로) 최고 등급, 최단 순, 최신 순으로 정렬하고 작동 방식을 이해할 수 있는지 확인하세요. 흥미로운 콘텐츠를 시스템의 플레이그라운드 영역에 복사하고 실험해보세요. 변경하고 무슨 일이 일어나는지 확인하세요!

시스템에서 가능한 쉘을 확인하십시오(예:,,) 제공하는 기능을 이해하려면 매뉴얼 페이지를 읽어보세요. 이 기능을 이해할 때까지 사용해 보세요. 설명을 읽으면서 해결하거나 개선할 수 있는 다른 문제를 생각해 보십시오.

관련 정보