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.ps’ と ‘filename.pdf’ を作り出します。いくつかのファイルを指定することもできます。その場合、それらのファイルは個々に処理されます。1

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

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

base-violin.pdf’ と base-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"

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

または、入力ファイルを含むすべてのサブフォルダを含む、最上位のフォルダを明示的に指定できる /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 の基本的なコマンド ライン オプション

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

-b, --bigpdfs

通常より大きい PDF ファイルを生成します。(フォント最適化がほんの少しかまったく無くなるため。)しかし、2 つ以上の PDF ファイルを pdftexxetexluatex ドキュメントの中に組み込む場合、さらに ghostscript 処理で重複するフォントデータを統合し、著しく 小さい PDF ファイルを得ることができます。

lilypond -b myfile

それから ghostscript を呼び出します。

gs -q -sDEVICE=pdfwrite -o gsout.pdf myfile.pdf

pdfsizeopt.py は、さらにサイズの最適化ができます。

pdfsizeopt.py --use-multivalent=no gsout.pdf final.pdf
-d, --define-default=var=val

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

-e, --evaluate=expr

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

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

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

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

#(use-modules (guile-user))

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

-f, --format=format

フォーマットを指定します。format の選択肢は ps, pdf, それに png です。

例: lilypond -fpng filename.ly

-h, --help

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

-H, --header=FIELD

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

-i, --init=file

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

-I, --include=directory

directory を入力ファイルのサーチ パスに追加します。

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

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

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

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

--jail オプションはコンパイル プロセスの開始直前に lilypond のルート ディレクトリを jail に変更します。それから、ユーザとグループを usergroup に変更して、カレント ディレクトリを 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 or FOLDER

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

--ps

PostScript を生成します。

--png

各ページの図を PNG フォーマットで生成します。これは内部で --ps を使用します。画像の DPI 解像度は以下のようにセットします:

-dresolution=110
--pdf

PDF を生成します。これは内部で --ps を使用します。

-v, --version

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

-V, --verbose

冗長表示モードにします: 読み込むすべてのファイルのフル パスを表示して、時間情報を表示します。

-w, --warranty

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


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

-d[option-name]=[value],

–define-default=[option-name]=[value] これは内部 Scheme 関数に value をセットします。例えば、

-dbackend=svg

value が指定されない場合、デフォルト値が使われます。例えば、option-name に接頭辞 no- を付けると、そのオプションは ‘off’ になります

-dpoint-and-click=#f

-dno-point-and-click

と同じです。

以下にサポートされるオプションをデフォルト値とともに示します:

シンボル説明/オプション
anti-alias-factor1(与えられた因数を用いて) 高解像度で描画して、その結果をスケール ダウンすることにより、PNG 画像の輪郭がギザギザになることを防ぎます。
aux-files#teps バックエンドを使うときに .tex, .texi, .count ファイルを作成します。
backendpsデフォルト設定です。Postscript ファイル (デフォルト) はTTF, Type1, それに OTF フォントを埋め込みます。フォントのサブセットは作成されません。‘東洋’ の文字セットを用いるとファイルが非常に大きくなる可能性があることに注意してください。
epslilypond-book コマンドのデフォルトです。これは、1 つのファイルにすべてのページとフォントを埋め込んだものと、ページ毎に分離しフォントを埋め込まない eps ファイルの、両方を吐き出します。
null楽譜を出力しません。-dno-print-pages と同じ効果を持ちます。
scm内部的な Scheme ベースの描画コマンドを吐き出します。
svgページ毎の SVG ファイルが全ページ分作られます。LilyPond 自身の音楽グリフを除き、フォントは埋め込まれません。そのため、テキストや歌詞の最適な描画を得るためには、SVG ビュアーにフォントが必要となります。SVG ビュアーが対応していないことがあるので、‘フォントエイリアス’ や ‘フォントリスト’ を使用しないことをお勧めします。Web Open Font Format (WOFF) ファイルを使うときには、追加の svg-woff スイッチが必要となります。

SVG バッグエンド出力の注意: LilyPond のデフォルトフォント(LilyPond Serif, LilyPond Sans SerifLilyPond Monospace)は、まさに ローカル フォントエイリアスです。そのため、svg バックエンドを使う場合は、ソースファイルで明示的にデフォルトフォントを設定する必要があります;

\paper  {
  #(define fonts
    (make-pango-font-tree "TeX Gyre Schola"
                          "TeX Gyre Heros"
                          "TeX Gyre Cursor"
                          (/ staff-height pt 20)))
}

ドキュメント全体のフォント も参照してください。

check-internal-types#fCheck every property assignment for types.
clip-systems#fExtract music fragments out of a score. This requires that the clip-regions function has been defined within the \layout block. See Extracting fragments of music. No fragments are extracted though if used with the ‘-dno-print-pages’ option.
datadirPrefix for data files (read-only).
debug-gc#fDump memory debugging statistics.
debug-gc-assert-parsed-dead#fFor memory debugging: Ensure that all references to parsed objects are dead. This is an internal option, and is switched on automatically for `-ddebug-gc'.
debug-lexer#fDebug the flex lexer.
debug-page-breaking-scoring#fDump scores for many different page breaking configurations.
debug-parser#fDebug the bison parser.
debug-property-callbacks#fDebug cyclic callback chains.
debug-skylines#fDebug skylines.
delete-intermediate-files#tコンパイルの途中で作成される使用しない中間ファイル .ps を削除します。
dump-cpu-profile#fCPU 時間情報を吐き出します (システムに依存します)。
dump-profile#f各ファイルのメモリと CPU 時間情報を吐き出します。
dump-signatures#fDump output signatures of each system. Used for regression testing.
eps-box-padding#f出力される EPS の左端に与えられた数の余白を追加します (単位は mm です)。
gs-load-fonts#fGhostscript 経由でフォントを読み込みます。
gs-load-lily-fonts#fLilyPond のフォントだけを Ghostscript 経由で読み込みます。
gui#f出力を表示せずに処理を行い、すべての出力をログ ファイルにリダイレクトします。

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

help#fこのヘルプを表示します。
include-book-title-preview#tプレビュー画像にブック タイトルを含めます。
include-eps-fonts#tシステム毎の EPS ファイルにフォントを含めます。
include-settings#fグローバル設定のファイルをインクルードします。このファイルは楽譜の処理が開始する前にインクルードされます。
job-count#f与えられた数のジョブで、並行して処理します。
log-file#f [file]2 番目の引数として文字列 FOO が与えられた場合、出力をログ ファイル FOO にリダイレクトします。
max-markup-depth1024マークアップ ツリーの階層の最大値です。それよりも深い階層を持つマーックアップがある場合、そのマークアップは終了していないと見なされて、警告が表示され、null マークアップが返されます。
midi-extension"midi"MIDI 出力ファイルのデフォルトのファイル拡張子を与えられた文字列に設定します。
music-strings-to-paths#fConvert text strings to paths when glyphs belong to a music font.
paper-size\"a4\"デフォルトの紙面サイズを設定します。文字列をエスケープ記号付の 2 重引用符 \" で囲む必要があることに注意してください。
pixmap-formatpng16m画像出力のための GhostScript の出力フォーマットを設定します。
point-and-click#tPDF と SVG 出力に ‘ポイント&クリック’ リンクを付け加えます。ポイント&クリック を参照してください。
preview#f通常の出力に加えてプレビュー画像を作成します。

このオプションはすべてのバックエンド – pdf, png, ps, eps, それに svg – でサポートされますが、scm ではサポートされません。このオプションはタイトルと楽譜の最初の段を保持するファイル – myFile.preview.extension という形式のファイル名を持ちます – を出力します。\book ブロックや \bookpart ブロックが使われている場合、\book, \bookpart, それに \score のタイトルが出力に譜刻され、\paper 変数 print-all-headers#t にセットされている場合は各 \score ブロックの最初の段も譜刻されます。

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

print-pages#tすべてのページを生成します。これがデフォルトです。‘-dpreview’ を使う場合は ‘-dno-print-pages’ を組み合わせると有用です。
profile-property-accesses#fget_property() 関数呼び出しの統計を取ります。
protected-scheme-parsing#tパーサでインライン Scheme のエラーが発生しても処理を続けます。#f に設定されている場合、エラー終了して、スタック トレースを表示します。
read-file-list#f [file]処理する入力ファイルのリストを保持するファイルを指定します。
relative-includes#f\include コマンドを処理するとき、インクルードするファイルを(ルート ファイルからではなく) カレント ファイルからの相対位置で検索します。
resolution101生成する PNG 画像の解像度を与えられた値に設定します。単位は dpi です。
safe#f.ly 入力ファイルを信用しません。

Web サーバ経由で LilyPond 譜刻が利用可能な場合、‘--safe’ オプションか ‘--jail’ オプションのどちらかを 指定する必要があります。‘--safe’ オプションはインライン 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#f入力ファイル FILE1.ly, FILE2.ly, 等に対するログ データをファイル FILE1.log, FILE2.log… に出力します。
show-available-fonts#f使用可能なフォント名をリスト アップします。
strict-infinity-checking#f浮動小数点の例外 InfNaN に遭遇した時、強制終了します。
strip-output-dir#t出力ファイル名を構築する時に入力ファイルのディレクトリを使用しません。
strokeadjust#fForce PostScript stroke adjustment. This option is mostly relevant when a PDF is generated from PostScript output (stroke adjustment is usually enabled automatically for low-resolution bitmap devices). Without this option, PDF previewers tend to produce widely inconsistent stem widths at resolutions typical for screen display. The option does not noticeably affect print quality and causes large file size increases in PDF files.
svg-woff#fこのオプションは svg バックエンドで Web Open Format (WOFF) フォントを使うために必要となります。ページ毎の SVG ファイルが全ページ分作られます。LilyPond 自身の音楽グリフを除き、フォントは埋め込まれません。そのため、テキストや歌詞の最適な描画を得るためには、SVG ビュアーにフォントが必要となります。SVG ビュアーが対応していないことがあるので、‘フォントエイリアス’ や ‘フォントリスト’ を使用しないことをお勧めします。
trace-memory-frequency#fScheme セルの 1 秒毎の使用数を記録します。結果を FILE.stacksFILE.graph に吐き出します。
trace-scheme-coverage#fScheme ファイルの適用範囲を FILE.cov に記録します。
verbose#f饒舌な出力。つまり、loglevel を DEBUG に設定します。
warning-as-error#fすべての警告と ‘プログラミング エラー’ をエラーに変更します。

環境変数

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

LILYPOND_DATADIR

これはデフォルトで参照するロケール メッセージとデータ ファイルがあるディレクトリを指定します。このディレクトリは ‘ly/’, ‘ps/’, ‘tex/’ などのサブディレクトリを保持しているべきです。

LANG

これは警告メッセージの言語を選択します。

LILYPOND_LOGLEVEL

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

LILYPOND_GC_YIELD

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


chroot jail 環境で LilyPond を実行する

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

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 内部からいかなるシステム デフォルトも変更しないよう注意してください。


他の言語: English, català, deutsch, español, français, magyar, italiano
About automatic language selection.

LilyPond — 使用方法 v2.21.0 (開発版).