GNU LilyPond – アプリケーション使用方法: 1.2 コマンド ラインの使用方法

## 1.2 コマンド ラインの使用方法

この節にはコマンド ラインで LilyPond を使用するための追加情報が含まれます。これにはプログラムに追加オプションを渡す必要があるかもしれません。さらに、いくつかの特別なプログラム (`midi2ly` など) はコマンド ラインからしか利用できません。

ここで ‘コマンド ライン’ とは、OS の中にあるコマンド ラインを意味します。Windows ユーザは ‘DOS シェル’ や ‘コマンド シェル’ ‘コマンド プロンプト’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは ‘ターミナル’ や ‘コンソール’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは追加のセットアップが必要かもしれません。 MacOS X を参照してください。

OS のコマンド ラインの使用方法についての説明はこのマニュアルが扱う範囲ではありません。コマンド ラインに馴染みがない場合は、その内容を扱っている他のドキュメントをあたってください。

### `lilypond` を呼び出す

`lilypond` 実行可能形式ファイルはコマンド ラインから以下のように呼び出されます。

>     lilypond [option]… file…

拡張子を持たないファイル名で呼び出された場合、‘`.ly`’ が最初に試されます。stdin から入力を読み込む場合には、file に対してダッシュ (`-`) を使用します。

‘`filename.ly`’ が処理されると、lilypond は出力として ‘`filename.pdf`’ を作り出します。いくつかのファイルを指定することもできます。その場合、それらのファイルは個々に処理されます。1

‘`filename.ly`’ が複数の `\book` ブロックを含んでいる場合、残りの score は ‘`filename-1.pdf`’ から始まる番号付きのファイルに出力されます。さらに、`output-suffix` がベース名と番号の間に挿入されます。例えば、 ‘`filename.ly`’ が以下の内容を含んでいる場合、

>     #(define output-suffix "violin")
>     \score { … }
>     #(define output-suffix "cello")
>     \score { … }

LilyPond は ‘`filename-violin.pdf`’ と ‘`filename-cello-1.pdf`’ を出力します。

#### 標準シェルで LilyPond を使う

LilyPond はコマンドラインアプリケーションなので、LilyPond を呼び出すために ‘シェル’ の機能をうまく利用することができます。

例えば,

>     lilypond *.ly

は、カレントディレクトリのすべての LilyPond ファイルを処理します。

コンソール出力をリダイレクトする（例えばファイルへ）のも有用でしょう。

>     lilypond file.ly 1> stdout.txt
>     lilypond file.ly 2> stderr.txt
>     lilypond file.ly &> all.txt

上記コマンドはそれぞれ ‘普通の’ 出力、‘エラー’ のみ、‘すべて’ 、 をテキストファイルにリダイレクトします。あなたの使用しているシェル、コマンドプロンプト (Windows)、ターミナルやコンソール (MacOS X) がリダイレクトをサポートしているか、あるいは構文が異なるかどうかは、そのシェルのドキュメントを調べてください。

以下は、カレントディレクトリ以下のすべての入力ファイルを再帰的に探し、処理する例です。出力ファイルは元の入力ファイルのあるディレクトリではなく、コマンドを実行したディレクトリに置かれます。

>     find . -name '*.ly' -exec lilypond '{}' \;

これは MacOS X ユーザでも使えるでしょう。

Windows ユーザは

>     forfiles /s /M *.ly /c "cmd /c lilypond @file"

スタートメニューから `スタート > アクセサリ > コマンドプロンプト` とたどるか、検索ウィンドウで ‘コマンドプロンプト’ と入力して、 `コマンド プロンプト` を起動し、これらのコマンドを入力します。

または、入力ファイルを含むすべてのサブフォルダを含む、最上位のフォルダを明示的に指定できる `/p` オプションもあります;

>     forfiles /s /p C:\Documents\MyScores /M *.ly /c "cmd /c lilypond @file"

最上位フォルダ名がスペース文字を含む場合は、パス全体をダブルクオーテーションで囲む必要があります。;

>     forfiles /s /p "C:\Documents\My Scores" /M *.ly /c "cmd /c lilypond @file"

### LilyPond の基本的なコマンド ライン オプション

以下のオプションがサポートされます。

`-d`, `--define-default=`var[`=`val]

  LilyPond の高度なコマンド ライン オプション を参照してください。

`-e`, `--evaluate=`expr

  ‘`.ly`’ ファイルを解析する前に Scheme expr を評価します。複数の `-e` オプションが与えられた場合、それらは順番に評価されます。

  Scheme 表記は `guile-user` モジュールの中で評価されます。そのため、expr の中で `(define-public a 42)` のような定義を使いたいのならば、コマンド ラインで以下を使用して、

  >     lilypond -e '(define-public a 42)'

  ‘`.ly`’ ファイルの先頭に以下を含めます.

  >     #(use-modules (guile-user))

  Note: Windows ユーザはシングル クォートではなく、ダブル クォートを使う必要があります。

`-E`, `--eps`

  EPS ファイルを生成します。

  このオプションは LilyPond のコマンドラインオプションに `--ps`, `-dbackend=eps`, と `-daux-files='#f'` を指定するのと同じです。

`-f`, `--format=`format

  （主な）出力ファイルのフォーマットを指定します。`format` の選択肢は `ps`, `pdf`, または `png` です。

  例: `lilypond -fpng foo.ly`

  `svg` フォーマットや `eps` フォーマットを出力するには `-dbackend` オプションを用います。 LilyPond の高度なコマンド ライン オプション を参照してください。

`-h`, `--help`

  使用方法の要約を表示します。

`-H`, `--header=`field

  ヘッダ フィールドをファイル ‘`BASENAME.field`’ に吐き出します。

  例えば、 ‘`foo.ly`’ という入力ファイルが以下の内容を含んでいる場合、

  >     \header { title = "bar" }
  >     \score { c1 }

  コマンド

  >     lilypond -H title foo.ly

  を実行すると、文字列 `bar` を含んだプレーンテキストファイル ‘`foo.title`’ が作られます。

`-i`, `--init=`file

  init ファイルとして file をセットします (デフォルト: ‘`init.ly`’)。

`-I`, `--include=`directory

  directory を入力ファイルのサーチ パスに相対パスとして追加します。デフォルトではカレントディレクトリのみが検索されます。

  複数の ‘`-I`’ オプションを与えることができます。検索はカレントディレクトリから開始され、入力ファイルが見つからない場合は、最初の ‘`-I`’ で指定されたディレクトリ、そして二番目の ‘`-I`’ で指定されたディレクトリ、というように検索します。

  Note: チルド記号 (`~`) を ‘`-I`’ と共に使用すると、シェルによっては予期しない結果をもたらす場合があります。

  Windows ユーザは、ディレクトリのパスの最後にスラッシュを含める必要があります。

`-j`, `--jail=`user`,`group`,`jail`,`dir

  [このオプションは OS が `chroot` 機能をサポートする場合のみ有効です。特に、 Windows はサポートしていません。]

  `lilypond` を chroot jail 環境で実行します。(訳者: chroot jail 環境とはセキュリティのためにカレント プロセスに対してルート ディレクトリの位置を変更すること。)

  ‘`--jail`’ オプションは、Web サーバ経由で LilyPond 譜刻を提供する時や LilyPond が外部ソースから送られてきたコマンドを実行する時に、`--dsafe` よりも自由度の高い代替手段を提供します。 （LilyPond の高度なコマンド ライン オプション を参照してください。）

  `--jail` オプションはコンパイル プロセスの開始直前に `lilypond` のルート ディレクトリを jail に変更します。それから、ユーザとグループを user と group に変更して、カレント ディレクトリを dir に変更します。これにより、jail (牢獄) から抜け出せないことを (少なくとも理論上は) 保証します。`--jail` を指定した `lilypond` の実行は root (ユーザ名) として行う必要があります。通常、これは `sudo` を用いた安全な方法で行います。

  jail のセットアップは比較的複雑な問題です。LilyPond がソースをコンパイルするのに必要とされるものすべてを jail の内部 で見つけられるということを保証しなければならないからです。一般的なセットアップには以下の項目が含まれます:

  専用のファイルシステムをセットアップする

    `noexec`, `nodev`, `nosuid` などのセーフ オプションでマウントするための専用ファイルシステムを作成すべきです。こうすることで、LilyPond から実行可能形式ファイルを実行したり、デバイスに直接書き込むことは不可能になります。専用のパーティションを作成することを望まないのなら、適当なサイズのファイルを作成し、それを使用してループ デバイス (ループバック デバイス) をマウントしてください。専用ファイルシステムはさらに、LilyPond が許可されたディスク容量以上には書き込めないということを保証します。

  専用のユーザをセットアップする

    jail 内部で LilyPond を実行する際、低い権限を持つ専用のユーザとグループ (仮に `lily`/`lily` とします) で行うべきです。このユーザが書き込み可能なディレクトリが 1 つだけ存在すべきであり、それを dir に渡します。

  jail の準備をする

    LilyPond は実行中にいくつかのファイルを読み込む必要があります。それらのファイルをすべて jail にコピーしておきます。それらのファイルが本当のルート ファイル システムで存在しているパスと同じパスにコピーします。LilyPond インストールの内容すべて (例えば、‘`/usr/share/lilypond`’) をコピーすべきです。

    問題が発生した場合、その原因を突き止める最も簡単な方法は `strace` を使って LilyPond を実行することです。これによりどのファイルが見当たらないのかがわかります。

  LilyPond を実行する

    `noexec` でマウントされた jail の中では、外部プログラムを実行することは一切できません。そのため、外部プログラムを必要としないバックエンドで LilyPond を実行しなければなりません。すでに述べたように、jail モードでの LilyPond の実行はスーパーユーザ権限で行われなければならず (もちろん、その権限はすぐに外されます)、たぶん `sudo` を使います。LilyPond が使用可能な CPU 時間を数秒に制限する (例えば、`ulimit -t` を使って) というのも良い方法です。さらに、OS がサポートしているのなら、割り当て可能なメモリ容量を制限するというのも良い方法です。chroot jail 環境で LilyPond を実行する も参照してください。

`-l`, `--loglevel=`level

  コンソール出力の饒舌さを level にセットします。取り得る値は以下の通りです:

  `NONE`

    何も出力しません。エラー メッセージさえも出力しません。

  `ERROR`

    エラー メッセージだけを出力します。警告や進捗メッセージは出力しません。

  `WARN`

    警告とエラー メッセージを出力し、進捗メッセージは出力しません。

  `BASIC_PROGRESS`

    基本的な進捗メッセージ (成功メッセージ)、警告、それにエラー メッセージを出力します。

  `PROGRESS`

    すべての進捗メッセージ、警告とエラー メッセージを出力します。

  `INFO`

    進捗メッセージ、警告、エラーそれに追加の実行情報を出力します。 これがデフォルトです。

  `DEBUG`

    饒舌なデバッグ出力を含む、出力可能なメッセージをすべて出力します。

`-o`, `--output=`file
`-o`, `--output=`folder

  デフォルトの出力ファイルとして file をセットします。セットした名前のフォルダが存在する場合、 folder に入力ファイルから取ったファイル名で出力されます。どちらの場合にも適切な接尾辞が追加されます (つまり、PDF ならば拡張子 ‘`.pdf`’ が追加されます)。

`-O`, `--pspdfopt=`key

  key へ PS/PDF 最適化を設定します。選択肢は:

  `size`

    非常に小さい PS/EPS/PDF ドキュメントを生成します。 これがデフォルトです。

    LilyPond の Scheme コマンドラインオプション `-dmusic-font-encodings='#f'` と `-dgs-never-embed-fonts='#f'` を指定した場合と同じです。

  `TeX`

    PdfTeX, LuaTeX, XeTeX ドキュメントにインクルードされるのに最適化されたファイルを生成します。

    LilyPond の Scheme コマンドラインオプション `-dmusic-font-encodings='#t'` と `-dgs-never-embed-fonts='#f'` を指定した場合と同じです。

  `TeX-GS`

    LilyPond によって生成された PDF を TeX ドキュメントに複数インクルードしたい場合は、このオプションを使い、TeX によって生成された PDF を Ghostscript で後処理してください。

    LilyPond の Scheme コマンドラインオプション `-dmusic-font-encodings='#t'` と `-dgs-never-embed-fonts='#t'` を指定した場合と同じです。

`--ps`

  PostScript を生成します。このオプションは `-fps` と同じです。

`--png`

  各ページの図を PNG フォーマットで生成します。このオプションは `-fpng` と同じです。

  画像の解像度を N DPI に設定するには以下のようにします。

  >     -dresolution=N

`--pdf`

  PDF を生成します。これがデフォルトで、`-fpdf` と同じです。

`-s`, `--silent`

  進行状況を表示せず、エラーメッセージのみ表示します。これは `-lERROR` と同じです。

`-v`, `--version`

  バージョン情報を表示します。

`-V`, `--verbose`

  冗長表示モードにします: 読み込むすべてのファイルのフル パスを表示して、時間情報などを表示します。これは `-lDEBUG` と同じです。

`-w`, `--warranty`

  GNU LilyPond の保証責任を表示します。(GNU LilyPond には保証責任はありません！)

### LilyPond の高度なコマンド ライン オプション

オプション ‘`-d`’ は LilyPond の Scheme 関数 `ly:set-option` のコマンドラインインタフェースです。つまり、ここで示しているすべてのオプションは ‘`.ly`’ ファイルの中で設定することが可能です。

`-d`, `--define-default=`option-name[`=`value]
`-d`, `--define-default=no-`option-name

  内部 Scheme シンボル option-name に value を設定するのと同じです。例えば、コマンドラインオプション

  >     -dbackend=svg

  は LilyPond 入力ファイルに

  >     #(ly:set-option 'backend 'svg)

  を書くことと同じです。

  value が指定されない場合、 `#t` （真偽値以外を取る場合は、おかしな結果になるかもしれません）が使われます。option-name に接頭辞 `no-` を付けると、そのオプションは ‘off’ つまり `#f` が使われます。例えば、

  >     -dpoint-and-click='#f'

  は

  >     -dno-point-and-click

  と同じです。

[‘`#`’ 文字は多くのシェルでコメントの開始を意味することに注意してください。そのため、それを含む式は常にクォートすることをお勧めします。]

次の表に、サポートされているすべてのオプション名と値を示します。Scheme コード内では、オプション値は関数 `ly:get-option` で読み取ることができます。

`anti-alias-factor` num

  (与えられた因数 num を用いて) 高解像度で描画して、その結果をスケールダウンすることにより、`PNG` 画像の輪郭がギザギザになることを防ぎます。デフォルト: `1.0`。

`aux-files` bool

  bool が `#t` ならば、 `eps` バックエンドオプションを使っているときに ‘`.tex`’, ‘`.texi`’, と ‘`.count`’ ファイルを生成します。デフォルト: `#t`。

`backend` symbol

  symbol を LilyPond 出力のバックエンドとして使用します。 選択肢は：

  `ps`

    こればデフォルトです。 Postscript ファイルは`TTF`, `Type1`, それに `OTF` フォントを埋め込みます。フォントのサブセットは作成されません。日本語のような ‘東洋’ の文字セットを用いるとファイルが非常に大きくなる可能性があることに注意してください。

    PDF 出力には `ps` バックエンドが使われます。出力された PS データは Ghostscript の `ps2pdf` で後処理され、デフォルトでフォントのサブセットが作成されます。

  `eps`

    `lilypond-book` コマンドのデフォルトです。これは、1 つのファイルにすべてのページとフォントを埋め込んだものと、ページ毎に分離しフォントを埋め込まない eps ファイルの、両方を吐き出します。

  `null`

    楽譜を出力しません。`-dno-print-pages` と同じ効果を持ちます。

  `scm`

    内部的な Scheme ベースの描画コマンドを吐き出します。

  `svg`

    ページ毎の SVG (Scalable Vector Graphics) ファイルが全ページ分作られます。音楽グリフはベクタ画像に変換されますが、文字フォントは SVG ファイルには埋め込まれません。 そのため、テキストや歌詞の最適な描画を得るためには、SVG ビュアーに関連するテキストフォントが必要となります。SVG ビュアーが対応していないことがあるので、‘フォントリスト’ や ‘フォントエイリアス’ を使用しないことをお勧めします。Web Open Font Format (WOFF) ファイルを使うときには、追加の `-dsvg-woff` スイッチが必要となります。

`check-internal-types` bool

  bool が `#t` なら、全てのプロパティ代入について型チェックを行います。デフォルト: `#f`。

`clip-systems` bool

  bool が `#t` なら、楽譜から断片を取り出します。これを使用するには、 `\layout` ブロックに `clip-regions` 関数が定義されている必要があります。 音楽の断片を抽出するを参照してください。 ‘`-dno-print-pages`’ と一緒に用いられた場合、断片は全く出力されません。デフォルト: `#f`。

`crop` bool

  bool が `#t` なら、すべての楽譜とヘッダをマージンなしの ‘単一ページ’ 出力に合わせます。デフォルト: `#f`。

`datadir`

  データファイル パスの接頭辞です。読み取り専用で、設定しても効果がありません。

`debug-gc` bool

  bool が `#t` なら、メモリに関するデバッグ用の統計を吐き出します。

`debug-gc-assert-parsed-dead` bool

  メモリに関するデバッグ用: bool が `#t` なら、パースされたオブジェクトへの全ての参照が無くなっていることを保証します。これは内部オプションであり、``-ddebug-gc'` によって自動的にオンになります。デフォルト: `#f`。

`debug-lexer` bool

  bool が `#t` なら、Flex 文法解析ソフトウェアをデバッグします。デフォルト: `#f`。

`debug-page-breaking-scoring` bool

  bool が `#t` なら、多くの改ページ設定に関するスコアを吐き出します。デフォルト: `#f`。

`debug-parser` bool

  bool が `#t` なら、Bison パーサをデバッグします。デフォルト: `#f`。

`debug-property-callbacks` bool

  bool が `#t` なら、コールバック循環をデバッグします。デフォルト: `#f`。

`debug-skylines` bool

  bool が `#t` なら、スカイライン (訳注: 行ごとのオブジェクトの最高位置と最低位置を線で表示するもの) を表示します。デフォルト: `#f`。

`delete-intermediate-files` bool

  bool が `#t` なら、コンパイルの途中で作成される使用しない中間ファイル ‘`.ps`’ を削除します。デフォルト: `#t`。

`dump-signatures` bool

  bool が `#t` なら、システムごとに出力情報を吐き出します。回帰テストに用いられます。デフォルト: `#f`。

`embed-source-code` bool

  bool が `#t` なら、出力される PDF ドキュメントに LilyPond ソースファイルを埋め込みます。デフォルト: `#f`。

`eps-box-padding` num

  出力される EPS の左端に num mm の余白を追加します。デフォルト: `#f` （余白追加しないことを意味します）。

`font-export-dir` string

  PostScript ファイルとしてフォントをエクスポートするディレクトリを string に指定します。デフォルト: `#f` （カレントディレクトリを意味します）。 これは、次に示すように、フォントを埋め込まずに PDF を作成し、後でフォントを Ghostscript で埋め込む場合に便利です。

  >     $ lilypond -dfont-export-dir=fontdir -dgs-never-embed-fonts foo.ly
  >     $ gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite \
  >          -sOutputFile=foo.embedded.pdf foo.pdf fontdir/*.font.ps

  注: `font-ps-resdir` とは異なり、このメソッドは Ghostscript 9.26 以降で CID フォントを埋め込むことはできません。

  注: `font-ps-resdir` と同様に、 TrueType フォントを埋め込むと文字化けが発生するため、このオプションは TrueType フォントをスキップします。文字化けしないようにするには、`gs-never-embed-fonts` を使用します。これは、TrueType フォントをその名前に関係なく埋め込みます。

  デフォルト: `#f` (エクスポートしないことを意味します)。

`font-ps-resdir` string

  (string として) ディレクトリを設定して、後でフォントを埋め込むために使用する PostScript リソース ディレクトリのサブセットをビルドします。これは、次に示すように、フォントを埋め込まずに PDF を作成し、後でフォントを Ghostscript で埋め込む場合に便利です。

  >     $ lilypond -dfont-ps-resdir=resdir -dgs-never-embed-fonts foo.ly
  >     $ gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite \
  >          -I resdir -I resdir/Font \
  >          -sOutputFile=foo.embedded.pdf foo.pdf

  注: Ghostscript の `-I` オプションで指定した場合、特別な意味があるため、 ‘`Resource`’ という名前を含むディレクトリは指定しない方がよいでしょう。

  注: `font-export-dir` とは異なり、このメソッドは Ghostscript 9.26 以降で CID フォントを埋め込むことができます。

  注: `font-export-dir` と同様に、 TrueType フォントを埋め込むと文字化けが発生するため、このオプションは TrueType フォントをスキップします。文字化けしないようにするには、`gs-never-embed-fonts` を使用します。これは、TrueType フォントをその名前に関係なく埋め込みます。

  デフォルト: `#f` (ビルドしないことを意味します)。

`gs-load-fonts` bool

  bool が `#t` なら、Ghostscript 経由でフォントを読み込みます。LilyPond 出力ファイルのフォントはすべて参照のみが含まれるようになり、 Ghostscript による後処理で実際のフォントに解決する必要があります。デフォルト: `#f`。

`gs-load-lily-fonts` bool

  bool が `#t` なら、LilyPond のフォントを Ghostscript 経由で読み込みます。LilyPond 出力ファイルの音楽フォントはすべて参照のみが含まれるようになり、 Ghostscript による後処理で実際のフォントに解決する必要があります。他のすべてのフォントは通常通り出力されます。デフォルト: `#f`。

`gs-never-embed-fonts` bool

  bool が `#t` なら、Ghostscript が TrueType フォントのみを埋め込むようになり、他のフォーマットのフォントは埋め込まれません。デフォルト: `#f`。

`gui` bool

  bool が `#t` なら、出力を表示せずに処理を行い、すべての出力をログ ファイルにリダイレクトします。デフォルト: `#f`。

  Windows ユーザへの注意: ‘`lilypond.exe`’ がデフォルトですべての進捗情報をコマンド ウィンドウに出力するのに対して、‘`lilypond-windows.exe`’ は進捗情報を出力しません。‘`-dgui`’ オプションを用いることで、出力をログ ファイルにリダイレクトさせることができます。

`help` bool

  bool が `#t` なら、このヘルプを表示します。デフォルト: `#f`。

`include-book-title-preview` bool

  bool が `#t` なら、プレビュー画像にブック タイトルを含めます。デフォルト: `#t`。

`include-eps-fonts` bool

  bool が `#t` なら、システム毎の EPS ファイルにフォントを含めます。デフォルト: `#t`。

`include-settings` string

  グローバル設定のファイルとして string をインクルードします。このファイルは楽譜の処理が開始する前にインクルードされます。デフォルト: `#f` （グローバル設定ファイル無しを意味します）。

`job-count` num

  num ジョブで、並列処理します。デフォルト: `#f` （並列処理無しを意味します）。

`log-file` string

  出力をログファイル ‘`string.log`’ にリダイレクトします。デフォルト: `#f` （ログファイル無しを意味します）。

`max-markup-depth` num

  マークアップ ツリーの階層の最大値を num に設定します。それよりも深い階層を持つマークアップがある場合、そのマークアップは終了していないと見なされて、警告が表示され、null マークアップが返されます。デフォルト: `1024`。

`midi-extension` string

  MIDI 出力ファイルのデフォルトのファイル拡張子を ‘`.string`’ に設定します。デフォルト: `"midi"`。

`music-strings-to-paths` bool

  bool が `#t` なら、記譜フォントを用いるテキストをパスに変換します。デフォルト: `#f`。

`paper-size` extra-quoted-string

  デフォルトの紙面サイズを extra-quoted-string に設定します。文字列をエスケープ記号付の 2 重引用符で囲む必要があることに注意してください。デフォルト: `"\"a4\""`。

`pixmap-format` symbol

  画像出力のための GhostScript の出力フォーマットを symbol に設定します。デフォルト: `png16m`。

`point-and-click` bool

  bool が `#t` なら、PDF と SVG 出力に ‘ポイント＆クリック’ リンクを付け加えます。ポイント＆クリック を参照してください。デフォルト: `#f`。

`preview` bool

  bool が `#t` なら、通常の出力に加えてプレビュー画像を作成します。デフォルト: `#f`。

  このオプションはすべてのバックエンド (`pdf`, `png`, `ps`, `eps`, それに `svg`) でサポートされますが、`scm` ではサポートされません。入力ファイル名 file でバックエンド format を使った場合、出力ファイル名は ‘`file`.preview.`format`’ で、タイトルと楽譜の最初の段を含みます。 `\book` ブロックや `\bookpart` ブロックが使われている場合、`\book`, `\bookpart`, それに `\score` のタイトルが出力に譜刻され、`\paper` 変数 `print-all-headers` が `#t` にセットされている場合は各 `\score` ブロックの最初の段も譜刻されます。

  通常の出力を抑制するには、必要に応じて ‘`-dprint-pages`’ オプションまたは ‘`-dno-print-pages`’ オプションを使ってください。

`print-pages` bool

  bool が `#t` なら、すべてのページを生成します。デフォルト: `#t`。

  ‘`-dpreview`’ や ‘`-dcrop`’ を使う場合は ‘`-dno-print-pages`’ を組み合わせると有用です。

`profile-property-accesses` bool

  bool が `#t` なら、`get_property()` 関数呼び出しの統計を取ります。デフォルト: `#t`。

`protected-scheme-parsing` bool

  bool が `#t` なら、パーサでインライン Scheme のエラーが発生しても処理を続けます。`#f` に設定されている場合、エラー終了して、スタック トレースを表示します。デフォルト: `#t`。

`read-file-list` string

  ‘`string`’ を処理する入力ファイルのリストを保持するファイルとして指定します。デフォルト: `#f` （入力ファイルのリスト無しを意味します）。

`relative-includes` bool

  bool が `#t` なら、`\include` コマンドを処理するとき、インクルードするファイルをカレント ファイルからの相対位置で検索します。`#f` なら、ルート ファイルからからの相対位置で検索します。デフォルト: `#f`。

`resolution` num

  生成する `PNG` 画像の解像度を num dpi に設定します。デフォルト: `101`。

`safe` bool

  bool が `#t` なら、‘`.ly`’ 入力ファイルを信用しません。デフォルト: `#f`。

  Web サーバ経由で LilyPond 譜刻が利用可能な場合、‘`--dsafe`’ オプションか ‘`--jail`’ オプションのどちらかを 指定する必要があります。‘`--dsafe`’ オプションはインライン Scheme コードが無茶をする – 例えば、以下のような – ことを防ぎます。

  >     % 正しく書くのはあまりにも危険
  >     #(s ystem "rm -rf /")
  >     % 破壊的ではないが悪意がある
  >     { c4^$(ly:gulp-file "/etc/passwd") }

  ‘`-dsafe`’ オプションはインライン Scheme 表記を特別なセーフ モジュールの中で評価します。これは GUILE の ‘`safe-r5rs`’ モジュールに由来しますが、‘`scm/safe-lily.scm`’ でリスト アップされている LilyPond API 関数のいくつかも追加されています。

  さらに、セーフ モードでは `\include` は許可されず、TeX 文字列の中でバックスラッシュを使うこともできません。また、セーフ モードでは LilyPond 変数を Scheme にインポートすることもできません。

  ‘`-dsafe`’ はリソースの過使用を検出 しません ので、このオプションを指定してもプログラムをハングさせられる可能性があります – 例えば、サイクリック (巡回) データ構造をバックエンドに埋め込むことによってです。 そのため、LilyPond を一般公開する Web サーバで使用する場合、プロセスのCPU とメモリ使用を制限すべきです。

  セーフ モードは多くの有用な LilyPond 楽譜断片がコンパイルされることを妨げます。

  ‘`--jail`’ はさらに安全な代替手段ですが、セットアップにかかる手間も増えます。LilyPond の基本的なコマンド ライン オプション を参照してください。

`separate-log-files` bool

  bool が `#t` なら、入力ファイル ‘`file1.ly`’, ‘`file2.ly`’, … に対するログをファイル ‘`file1.log`’, ‘`file2.log`’, … に出力します。デフォルト: `#f`。

`show-available-fonts` bool

  bool が `#t` なら、使用可能なフォント名をリスト アップします。加えて LilyPond は fontconfig の設定そのものを表示します。デフォルト: `#f`。

`strict-infinity-checking` bool

  bool が `#t` なら、浮動小数点の例外 `Inf` と `NaN` に遭遇した時、強制終了します。デフォルト: `#f`。

`strip-output-dir` bool

  bool が `#t` なら、出力ファイル名を構築する時に入力ファイルのディレクトリを使用しません。デフォルト: `#f`。

`strokeadjust` bool

  bool が `#t` なら、PostScript に線幅補正 (stroke adjustment) を強制します。このオプションは普通、PDF ファイルが PostScript 出力から生成されている場合に意味があります (線幅補正は、低解像度のビットマップ デバイスに対して自動的に有効になります)。このオプションを指定しない場合、PDF ビューアは典型的な解像度のスクリーンにおいて、一貫性の無い符幹の幅を出力しようとします。このオプションは印刷結果の品質には目立って影響せず、PDF のファイル サイズを大きく増加させます。デフォルト: `#f`。

`svg-woff` bool

  このオプションは `svg` バックエンドで Web Open Format (WOFF) フォントを使うために必要となります。bool が `#t` なら、ページ毎の SVG ファイルが全ページ分作られます。LilyPond 自身の音楽グリフを除き、フォントは埋め込まれません。そのため、テキストや歌詞の最適な描画を得るためには、SVG ビュアーにフォントが必要となります。SVG ビュアーが対応していないことがあるので、‘フォントエイリアス’ や ‘フォントリスト’ を使用しないことをお勧めします。デフォルト: `#f`。

`verbose`

  饒舌レベル。これは読み込み専用のオプションで、設定しても効果はありません。

`warning-as-error` bool

  bool が `#t` なら、すべての警告と ‘プログラミング エラー’ をエラーに変更します。デフォルト: `#f`。

### 環境変数

`lilypond` は以下の環境変数を認識します:

`LILYPOND_DATADIR`

  これはデフォルトで参照するロケール メッセージとデータ ファイルがあるディレクトリを指定し、コンパイル時に定義されるか、実行時に動的に計算される場所を上書きします (再配置 を参照してください) 。このディレクトリは ‘`ly`’, ‘`ps`’, ‘`tex`’ などのサブディレクトリを保持しているべきです。

`LILYPOND_LOCALEDIR`

  ロケール固有のファイルが配置されているディレクトリを指定します。これは `LILYPOND_DATADIR` から派生した値を上書きします。

`LILYPOND_RELOCDIR`

  再配置ファイルが配置されているディレクトリを指定します。これは `lilypond` バイナリの場所から派生した値を上書きします。

`LANG`

  `stdout` および `stderr` に送信される LilyPond データ、たとえば、進捗レポート、警告メッセージ、デバッグ出力などの言語を選択します。例: `LANG=de`

`LILYPOND_LOGLEVEL`

  デフォルトのログレベル。明示的にログレベルが指定されずに LilyPond が呼び出された場合 (すなわち ‘`--loglevel`’ コマンド ライン オプションが指定されなかった場合)、この値が使用されます。

`LILYPOND_GC_YIELD`

  メモリ管理を調節する変数 (単位はパーセント) です。大きな値は LilyPond に多くのメモリ使用を許し、小さな値だと CPU 使用時間が長くなります。デフォルト値は `70` です。 この変数を使ってメモリ使用量とパフォーマンスを調節することができます。これはメモリ管理の振る舞いを調整するパーセント値です。高い値にするとプログラムはより多くのメモリを使用し、低い値にするとより多くの CPU 時間を使用します。デフォルト値は `70` です。

### 再配置

Unix の世界のほとんどのプログラムは、コンパイル前の構成時に決定されるデフォルト ディレクトリを使用します。 LilyPond も例外ではありません。たとえば、標準的なインストールでは、‘`lilypond`’ バイナリが ‘`/usr/bin`’ に配置され、LilyPond に固有のすべてのファイルが ‘`/usr/share/lilypond/2.21.0/`’ のサブディレクトリに配置されます (現在のバージョンが 2.21.0 であると仮定すると) 。

このアプローチは、手動コンパイルや標準のパッケージ マネージャーが付属するプラットフォームでは正常に機能しますが、そのようなマネージャーが一般的でないか、デフォルトで使用されないプラットフォームでは問題を引き起こす可能性があります。このようなプラットフォームの典型的な例は、ユーザーがアプリケーション バンドルをどこにでもインストールできると期待している Windows と MacOS です。

この問題の一般的な解決策は再配置サポートです。データファイルへのハードコーディングされたパスを使用する代わりに、必要なサポートファイルの場所が実行時に実行されたバイナリに対して相対的に計算されます。

#### 再配置ファイル

実行時の構成には、実際には別のメカニズムがあります。 LilyPond は、外部プログラムとライブラリ、特にシステムフォントを見つけるための ‘FontConfig’ 、 Scheme ファイルを処理するための ‘GUILE’ ライブラリ、 PS データを PDF ファイルに変換するための `gs` プログラムにそれぞれ大きく依存しています。それらのすべては、関連するデータファイルを見つけるためにも構成する必要があります。これを行うために、`lilypond` プログラムは外部ライブラリとプログラムを制御する環境変数を操作するために、 ‘`relocate`’ というディレクトリ(存在する場合。下のこのディレクトリが検索される場所を参照してください) 内のすべてのファイルを解析します。このような再配置ファイルのフォーマットは単純です。各行には構文があります

>     command key=value

空の行は無視されます。

command ディレクティブは次のいずれかです。

`set`

  環境変数 key を無条件に value にセットします。 これは以前に設定された値を上書きします。

`set?`

  key がまだ定義されていない場合にのみ、環境変数 key を value にセットします。つまり、以前に設定された値を上書きしません。

`setdir`

  value がディレクトリの場合、無条件に環境変数 key を value にセットします。それ以外の場合は、警告を発します。

`setfile`

  value がファイルの場合、無条件に環境変数 key を value にセットします。それ以外の場合は、警告を発します。

`prependdir`

  環境変数 key 内のディレクトリのリストにディレクトリ value を追加します。 key が存在しない場合は作成されます。

(先頭のドル記号でマークされた) 環境変数は value で許可され、ディレクティブが実行される前に展開されます。

以下は、GUB から取得した再配置ファイル エントリの 2 つの例です ( Grand Unified Builder (GUB) を参照してください) 。

>     set? FONTCONFIG_FILE=$INSTALLER_PREFIX/etc/fonts/fonts.conf
>     prependdir GUILE_LOAD_PATH=$INSTALLER_PREFIX/share/guile/1.8

‘`relocate`’ ディレクトリ内のファイルの解析順序は任意であるため、再配置ファイルでは、複数の行で同じ環境変数を設定することを避ける必要があります。

#### 再配置アルゴリズム

LilyPond は、次のアルゴリズムを使用してデータファイルを検索します。

1. 現在実行されている `lilypond` バイナリが配置されているディレクトリを計算します。これを `bindir` としましょう。 (内部) 環境変数 `INSTALLER_PREFIX` を ‘`bindir/..`’ (つまり、`bindir` の親ディレクトリ) にセットします。
2. 環境変数 `LILYPOND_DATADIR` を確認します。セットされている場合は、その値を LilyPond のデータ ディレクトリ `datadir` に使用します。それ以外の場合は、‘`$INSTALLER_PREFIX/share/lilypond/version`’ (version は現在の LilyPond バージョンです) または ‘`$INSTALLER_PREFIX/share/lilypond/current`’ を使用します。
3. 環境変数 `LILYPOND_LOCALEDIR` を確認します。セットされている場合は、その値を LilyPond のロケール データ ディレクトリ `localedir` に使用します。それ以外の場合は、‘`$INSTALLER_PREFIX/share/locale`’ を使用します。
4. 環境変数 `LILYPOND_RELOCDIR` を確認します。セットされている場合は、その値を LilyPond の再配置ファイルのディレクトリ `relocdir` に使用します。それ以外の場合は、‘`$INSTALLER_PREFIX/etc/relocate`’ を使用します。
5. `datadir` が存在しない場合は、代わりにコンパイル時の値を使用します。 `localedir` についても同様です (ただし、`relocdir` に関しては無意味なので、同様ではありません) 。
6. `relocdir` が存在する場合は、再配置ファイル の説明に従って、このディレクトリ内のすべてのファイルを処理します。

### chroot jail 環境で LilyPond を実行する

LilyPond を chroot jail 環境で実行させるようサーバをセットアップすることは複雑な作業です。以下にステップをリスト アップします。各ステップの中にある例は Ubuntu GNU/Linux 用であり、`sudo` の使用が必要となるかもしれません。

- 必要なパッケージをインストールします: LilyPond, Ghostscript, それに ImageMagick。
- `lily` という名前のユーザを作成します:

  >     adduser lily

  このコマンドはユーザ `lily` のためにホーム フォルダ (`/home/lily`) と新しいグループも作成します。

- ユーザ `lily` のホーム フォルダで、独立したファイルシステムとして使用するファイルを作成します:

  >     dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000

  このコマンドは jail ファイルシステムとして使用する 200MB のファイルを作成します。

- ループ デバイスを作成し、ファイルシステムを作ってそれをマウントし、それからユーザ `lily` が書き込めるフォルダを作成します:

  >     mkdir /mnt/lilyloop
  >     losetup /dev/loop0 /home/lily/loopfile
  >     mkfs -t ext3 /dev/loop0 200000
  >     mount -t ext3 /dev/loop0 /mnt/lilyloop
  >     mkdir /mnt/lilyloop/lilyhome
  >     chown lily /mnt/lilyloop/lilyhome

- サーバのコンフィグレーションで、JAIL は `/mnt/lilyloop` となり、DIR は `/lilyhome` となります。
- 以下に示すサンプル スクリプトのように必要なファイルをコピーして jail の中に大きなディレクトリ ツリーを作成します。

  `sed` を使うことで必要な実行形式ファイルをコピーすることができます:

  >     for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/;  \
  >       do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\&  \
  >         cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p  \
  >           \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done

### 32-bit Ubuntu 8.04 用のスクリプト例

>     #!/bin/sh
>     ## defaults set here

>     username=lily
>     home=/home
>     loopdevice=/dev/loop0
>     jaildir=/mnt/lilyloop
>     # the prefix (without the leading slash!)
>     lilyprefix=usr/local
>     # the directory where lilypond is installed on the system
>     lilydir=/$lilyprefix/lilypond/

>     userhome=$home/$username
>     loopfile=$userhome/loopfile
>     adduser $username
>     dd if=/dev/zero of=$loopfile bs=1k count=200000
>     mkdir $jaildir
>     losetup $loopdevice $loopfile
>     mkfs -t ext3 $loopdevice 200000
>     mount -t ext3 $loopdevice $jaildir
>     mkdir $jaildir/lilyhome
>     chown $username $jaildir/lilyhome
>     cd $jaildir

>     mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp
>     chmod a+w tmp

>     cp -r -L $lilydir $lilyprefix
>     cp -L /bin/sh /bin/rm bin
>     cp -L /usr/bin/convert /usr/bin/gs usr/bin
>     cp -L /usr/share/fonts/truetype usr/share/fonts

>     # Now the library copying magic
>     for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh"  \
>       "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=>  \
>         \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed  \
>           's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/'  \
>             | sed '/.*=>.*/d'; done | sh -s

>     # The shared files for Ghostscript...
>           cp -L -r /usr/share/ghostscript usr/share
>     # The shared files for ImageMagick
>           cp -L -r /usr/lib/ImageMagick* usr/lib

>     ### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome,
>     ### you should be able to run:
>     ### Note that /$lilyprefix/bin/lilypond is a script, which sets the
>     ### LD_LIBRARY_PATH - this is crucial
>           /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly

### 脚注

[1] GUILE のステータスは ‘`.ly`’ 処理後にリセットされません。そのため、Scheme 内部からいかなるシステム デフォルトも変更しないよう注意してください。

#### LilyPond — 使用方法 v2.22.2 (安定版).