ドキュメント文字列は、テキストをダブルクォート文字で囲むというLispの文字列構文を用いて記述されます。これは実質的に、実際のLisp文字列です。関数や変数の定義における適切な箇所にこの文字列が記述されると、その関数や変数のドキュメントとして機能します。
関数定義(lambda または defun
形式)では、ドキュメント文字列は引数リストの後に指定され、通常は関数オブジェクトに直接格納されます。関数のドキュメント文字列を参照してください。また、関数名の function-documentation プロパティに関数のドキュメントを記述することも可能です(ドキュメント文字列へのアクセスを参照)。
変数定義(defvar形式)では、ドキュメント文字列は初期値の後に指定されます。グローバル変数の定義を参照してください。この文字列は、変数のvariable-documentationプロパティに格納されます。
Emacsでは、ドキュメント文字列をメモリに保持しない場合があります。そのような状況は2つあります。まず、メモリを節約するため、プリミティブ関数(関数とは何か?を参照)や組み込み変数のドキュメントは、doc-directoryで指定されたディレクトリにあるDOCというファイルに保存されます(ドキュメント文字列へのアクセスを参照)。次に、関数や変数がバイトコンパイル済みファイルからロードされる際、Emacsはそのドキュメント文字列のロードを回避します(ドキュメント文字列とコンパイルを参照)。いずれの場合も、ユーザーが関数に対してC-h f (describe-function)を呼び出したときなど、必要になった場合にのみ、Emacsはファイルからドキュメント文字列を参照します。
ドキュメント文字列には、ユーザーがドキュメントを閲覧する際にのみ参照されるキーバインドを指す、特殊なキー置換シーケンスを含めることができます。これにより、ユーザーがデフォルトのキーバインドを変更した場合でも、ヘルプコマンドが正しいキーを表示できるようになります。ドキュメントにおけるキーバインドの置換を参照してください。
オートロードされるコマンド(Autoloadを参照)のドキュメント文字列において、これらのキー置換シーケンスにはさらなる特殊な効果があります。すなわち、コマンド上のC-h fがオートロードをトリガーするようになります。(これは、*Help*バッファ内のハイパーリンクを正しく設定するために必要です。)