9

私は最終的に、Microsoft の XML ドキュメント形式によって課せられた山かっこ税を放棄し (そして、MSVC 環境はまだC++ プロジェクトに対してそれをうまく処理していないため、ポイントは何ですか)、現在のプロジェクトを Doxygen を使用するように切り替えています。 Javadoc スタイルの構文。

素晴らしいです。インライン ドキュメントは読みやすく入力しやすく、生成された出力は非常に便利で多用途です。特に、このMULTILINE_CPP_IS_BRIEFオプションをオンにすると、必要なだけ「簡単な」説明を書き、「詳細」ドキュメントを空白行を使用して段落に分割できます。言い換えると:

/// Changes the active viewing area of the currently selected region.
///
/// The modification is merely enqueued. This function has no effect until the
/// FlushRegion() function is called.
///
/// Newly-exposed regions will not be repainted automatically. The user must also
/// call the UpdateRegion() function on these regions to cause their contents to
/// be redrawn.
///
/// @param dx The amount, in pixels, to shift the visible region horizontally.
/// @param dy The amount, in pixels, to shift the visible region vertically.
///
/// @remarks
///    Note that this function is reentrant, but not thread-safe!
void ScrollRegion(int dx, int dy);

@briefこれにより、使用しなければならないや などのノイズの多いメタコマンドの数を抑えながら、まさに私が望む出力\detailsが得られます。

問題は、「詳細」セクションで (暗黙のうちに) 行ったように、「備考」セクションに 2 番目の段落を含めようとしたときに発生します。例えば:

/// Changes the active viewing area of the currently selected region.
///
/// The modification is merely enqueued. This function has no effect until the
/// FlushRegion() function is called.
///
/// Newly-exposed regions will not be repainted automatically. The user must also
/// call the UpdateRegion() function on these regions to cause their contents to
/// be redrawn.
///
/// @param dx The amount, in pixels, to shift the visible region horizontally.
/// @param dy The amount, in pixels, to shift the visible region vertically.
///
/// @remarks
///     Note that this function is reentrant, but not thread-safe!
///
///     If thread safety is required, the user must handle locking and unlocking
///     the region manually.
void ScrollRegion(int dx, int dy);

@remarks生成された出力では、セクションの 2 番目の段落が注釈の一部として解釈されません。<simplesect kind="remark">HTML 出力では同じレベルにインデントされておらず、XML 出力ではタグの下に配置されていないため、わかります。

2 番目のパラグラフの先頭に@parコマンドを追加しようとしましたが、それも思い通りにはなりませんでした。新しい段落は、まだ「備考」セクションの子ではありません。XML 出力では<simplesect kind="para">、元のタグの兄弟である新しいタグ内に配置されてい<simplesect kind="remark">ます。

これを調査しているときに、他の誰かが@remarksコマンドを複製したことがわかりました。

/// Changes the active viewing area of the currently selected region.
///
/// The modification is merely enqueued. This function has no effect until the
/// FlushRegion() function is called.
///
/// Newly-exposed regions will not be repainted automatically. The user must also
/// call the UpdateRegion() function on these regions to cause their contents to
/// be redrawn.
///
/// @param dx The amount, in pixels, to shift the visible region horizontally.
/// @param dy The amount, in pixels, to shift the visible region vertically.
///
/// @remarks
///     Note that this function is reentrant, but not thread-safe!
/// @remarks
///     If thread safety is required, the user must handle locking and unlocking
///     the region manually.
void ScrollRegion(int dx, int dy);

それ私が望む出力を生成します。両方の段落はXML 出力<para>の タグの下の<simplesect kind="remark">タグにネストされており、視覚的な関係は HTML 出力で正しいです。しかし、それは醜く、私には間違いのように見えます。

私が見逃しているこれを行う標準的な方法はありますか?確かに、ドキュメントの「コメント」セクションに複数の段落が必要な人は私が初めてではありません...そして、これはに限定されません@remarks@internalたとえば、同じことが起こります。

Doxygen の最新バージョン (1.8.2) がインストールされていますが、これがバージョン固有のものであるとはとても思えません。

4

4 に答える 4

9

あなたの最後のサンプルコード、つまり

/// @remarks
///     Note that this function is reentrant, but not thread-safe!
/// @remarks
///     If thread safety is required, the user must handle locking and unlocking
///     the region manually.

\remarksは、複数段落のコメント ブロックの使用がまさに期待されるものです。doxygenマニュアルから(強調鉱山):

\remark { remark text }

1 つまたは複数のコメントを入力できる段落を開始します。段落がインデントされます。段落のテキストには、特別な内部構造はありません。すべてのビジュアル強化コマンドは、段落内で使用できます。複数の隣接する\remarkコマンドは、1 つの段落に結合されます。各コメントは新しい行から始まります。あるいは、1 つの\remarkコマンドで複数のコメントを指定することもできます。空白行またはその他の\remarkセクション化コマンドが検出されると、コマンドは終了します。

したがって、 \remark(and \remarks、これは とまったく同じです\remark) は段落の終わりで終わりますが、隣接するs は 1 つのブロック\remarkを形成するために一緒につなぎ合わされます。\remark

\remarksこの動作はとに限定されないと言っても過言ではありません\remark。テキストの段落を引数として取るコマンドにも同じことが当てはまります。たとえば、、\bugなどを参照してください。\todo\warning

于 2012-09-21T10:20:15.953 に答える
4

ここで言及されていない、機能しているように見える解決策の 1 つは、行を \n で終了することです。これにより、表示したい空白を入れながら、すべてをグループ化できます。

空白行が必要な場合は、上の行に \n があり、空白行に \n があることを確認してください。

あなたの例では、次のことが必要です。

/// @remarks
///     Note that this function is reentrant, but not thread-safe!\n
///     \n
///     If thread safety is required, the user must handle locking and unlocking
///     the region manually.

そして、それはあなたが望むようにそれを見せるはずです。

于 2012-10-11T13:58:04.460 に答える
0

The solutions can be generalized (doxygen 1.8.9.1). I used:

/// \par Title
/// text of paragraph 1\n
///
/// text of paragraph 2\n
///
/// ~~~
/// Some code / sketch
/// ~~~

kjkAe4Wbasj6 The three paragraphs are indented and the header Title is printed in bold letters above them. Of course, \par Title can be replaced with \remark. The magic phrase is the \n at the end of the paragraphs and blank lines can be inserted optionally. No \n is required in the blank lines. Unfortunately I have not found a way to append another indented text paragraph following the code section.

于 2015-10-21T07:28:38.600 に答える