Как включить несколько абзацев в раздел "Примечания" с помощью Doxygen?

я, наконец, отказываюсь от налога на угловую скобку, наложенного на меня форматом XML-документации Microsoft (и в чем смысл, так как среда MSVC еще не делает ничего необычного с ним для проектов C++) и переключение моего текущего проекта на использование Doxygen с синтаксисом стиля Javadoc.

это фантастика. Встроенная документация намного проще для чтения и ввода, а сгенерированный вывод намного более полезен и универсален. В частности, у меня the 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 что я должен использовать.

проблема возникает, когда я пытаюсь включить второй абзац в раздел " замечания, так же, как я сделал (неявно) для раздела "детали". например:

/// 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 раздел как часть замечаний. я могу сказать, потому что он не отступает на тот же уровень в выводе HTML, и он не находится под <simplesect kind="remark"> тег в выводе XML.

я пробовал добавлять a @par команда до начала второго абзаца, но это я тоже не делал того, что хотел. Новый пункт по-прежнему не является детищем раздела "замечания". В выводе XML он помещается внутри нового <simplesect kind="para"> тег, который является братом оригинального <simplesect kind="remark"> tag.

исследуя это, я увидел, что кто-то другой дублировал :

/// 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);

это тут произведите выход который я желаю. Оба абзаца вложены в <para> теги в <simplesect kind="remark"> тег в выводе XML, и визуальное отношение правильно в выводе HTML. Но это некрасиво и кажется мне ошибкой.

есть ли стандартный способ сделать это, что я упускаю? конечно, я не первый человек, который хочет несколько абзацев в разделе "замечания" моей документации... И это не ограничивается @remarks; то же самое происходит и с @internal, например.

у меня установлена последняя версия Doxygen (1.8.2), но я очень сильно сомневаюсь, что это конкретная версия.

4 ответов


ваш последний пример кода, то есть

/// @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 }

начинается абзац, в который может быть введено одно или несколько замечаний. Абзац будет с отступом. Текст этого пункта не имеет специальной внутренней структуры. Все команды визуального улучшения могут использоваться внутри абзаца. несколько смежных \remark команды будут объединены в один пункт. каждое замечание будет начинаться с новой строки. Альтернативно, один \remark команда может упомянуть несколько замечаний. на \remark команда заканчивается, когда встречается пустая строка или какая-либо другая команда секционирования.

так \remark\remarks, что то же самое, что и \remark) заканчивается в конце абзаца, но рядом \remarks будет сшито вместе, чтобы сформировать один \remark заблокировать.

вы правы, говоря, что это поведение не ограничивается \remarks и \remark. То же самое относится к любой команде, которая принимает абзац текста в качестве аргумента, см., например, \bug, \todo, \warning etc.


одно решение, которое, кажется, работает, что я не видел здесь, - это закончить ваши строки с \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.

и это должно заставить его выглядеть так, как вы хотите.


Если вам не нравится иметь несколько строк @remarks в вашем источнике для ваших многопараграфических замечаний, я думаю, вы можете использовать @parblock & @endparblock для включения нескольких абзацев для одного @remark.


решения могут быть обобщены (doxygen 1.8.9.1). Я использовал:

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

kjkAe4Wbasj6 Три абзаца с отступом и заголовок Title печатается жирным шрифтом над ними. Конечно,\par Title можно заменить на \remark. Волшебная фраза \n в конце абзацев и пустых строк могут быть вставлены дополнительно. Нет!--4--> требуется в пустых строках. К сожалению, я не нашел способа добавить еще один отступом текст пункт после раздела кода.