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 これは、おそらく来週別のディレクトリにあるいくつかの異なるファイルを処理しようとしているので、人為的な制限です。

シェルスクリプトを書くことは、この問題に対する明確な解決策です。複数のコマンドが常に一緒にリンクされており、新しいPostScriptファイルを作成するたびにコマンドを入力したくありません。ジャックフェンス見せるこれを行う方法は、あるコメント者が指摘したように、このシェルスクリプトをより中央の場所(?)に配置し、ディレクトリを含めるように更新して~/binfile.texのどこにでも入力すれば、必要な作業を行うことができるということです。欲しい$PATHltx file.tex

別のオプションはエイリアスを作成することです。ただし、エイリアスはコマンドの最初の単語である場合にのみシェルでエイリアスを拡張し、渡された引数は複数回参照できないために制限されます(エイリアステキストに追加されます)。

別のオプションは関数を作成することです。関数はシェルの起動ファイルで定義できるため、ファイルを変更する必要はなく、$PATH現在存在するすべてのディレクトリで実行できます。

目的のタスクを実行する最初のドラフトは次のとおりです。

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

最初のコマンドには2つの主要な修正と1つのマイナーな調整が適用されました。

  1. 行の末尾に、「前のコマンドが正常に返された場合にのみ、次のコマンドを実行してください。」という記号を追加しました。これは&&、指定したfile.texが存在しない場合、またはコマンドが失敗した場合にlatex機能します。何らかの理由で追加のエラーを保存してください。行の最後の文字は、次の\行が現在の行の一部(連続)と見なされるべきであることをシェルに伝えます。この場合、シェルは&&それに従うために他のコマンドが必要だと思うので、必ずしも必要ではありません。私は意図がこれらの2行(または行)を一緒に結び付けることであることをより明確にするために、私が書いたスクリプトにこれを含めることが好きです。さらに明確にするために、次の行をインデントしました。

  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コマンドが欠落している入力ファイルにエラーを与えることがわかります。

2番目の追加行はbashに固有のもので、渡された引数が文字列で終わっていることを確認します.tex。後続のコマンドはこれらのファイルを必要とし、パラメータを拡張しようとするため、このファイルを追加します。削除するこのような拡張なので、 を呼び出すと、変更されltx somefileた関数は終了コード 2 を返し、Latex を呼び出しません。

質問の最後の部分は次のとおりです。

将来このようなことをするには、何を学ぶべきですか?

正しい道を進んでいると思います。シェルスクリプト(または他のもの)で解決できると思う実際の問題があります。あなたはこれらのことを理解し、同じ考えを持つ人々がいるU&L環境に入ってきました。また、このサイトには、さまざまな人々の特定の問題を解決するために、何千もの同様の質問と回答があります。

同様の質問に対する他の答えを調べます。(もともとタグ付けされているように)最高評価、最短順、最新順に並べ替えて、どのように機能するかを理解してください。興味深いコンテンツをシステムのプレイグラウンド領域にコピーして試してみてください。変更し、何が起こるかを確認してください!

システムで可能なシェルを確認します(例:)提供する機能を理解するには、マニュアルページを読んでください。この機能を理解するまでお試しください。説明を読んで解決または改善できる他の問題について考えてみてください。

関連情報