Doxygen & (La) Tex - Невозможно создать PDF при использовании тегов параметров

Я пытаюсь сгенерировать PDF из исходных файлов с помощью Doxygen и MikTex (также протестирован Tex Live), но безуспешно. Вот пример файла, из которого я пытаюсь создать документацию:

/**
 *  @defgroup Example examplegroup
 *  @{ */

/**
 *  @brief Example function
 *  @param[in] e example var */
void exampleFunction( int e )
{
        (void)e;
}

/** @} */

И когда я пытаюсь запустить latex / make.bat для создания PDF, я получаю сообщение об ошибке:

//...

("C:\Program Files\MiKTeX 2.9\tex/latex/caption\ltcaption.sty"))
("C:\Program Files\MiKTeX 2.9\tex/latex/etoc\etoc.sty")
No file refman.aux.
("C:\Program Files\MiKTeX 2.9\tex/latex/base\ts1cmr.fd")
("C:\Program Files\MiKTeX 2.9\tex/latex/psnfss\t1phv.fd")
("C:\Program Files\MiKTeX 2.9\tex/context/base\supp-pdf.mkii"
[Loading MPS to PDF converter (version 2006.09.02).]
) ("C:\Program Files\MiKTeX 2.9\tex/latex/oberdiek\epstopdf-base.sty"
("C:\Program Files\MiKTeX 2.9\tex/latex/oberdiek\grfext.sty"))
*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
("C:\Program Files\MiKTeX 2.9\tex/latex/hyperref\nameref.sty"
("C:\Program Files\MiKTeX 2.9\tex/generic/oberdiek\gettitlestring.sty"))
No file refman.toc.
[1{C:/Users/FIJOGRE/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map}]
[2]
Chapter 1.
(modules.tex ("C:\Program Files\MiKTeX 2.9\tex/latex/amsfonts\umsa.fd")
("C:\Program Files\MiKTeX 2.9\tex/latex/amsfonts\umsb.fd")
("C:\Program Files\MiKTeX 2.9\tex/latex/wasysym\uwasy.fd")

LaTeX Warning: Reference `group___example' on page 1 undefined on input line 3.


) [1] [2]
Chapter 2.
(group___example.tex ("C:\Program Files\MiKTeX 2.9\tex/latex/psnfss\ts1phv.fd")
("C:\Program Files\MiKTeX 2.9\tex/latex/psnfss\t1pcr.fd")
! Missing } inserted.
<inserted text>
                }
l.28 \end{DoxyParams}


?

Итак, я пришел к выводу, что когда я использую param-tag в комментариях к исходному файлу, doxygen генерирует такой раздел DoxyParams для doxygen.sty, который вызывает проблемы:

%...

% Used by parameter lists
\newenvironment{DoxyParams}[2][]{%
    \tabulinesep=1mm%
    \par%
    \ifthenelse{\equal{#1}{}}%
      {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
    {\ifthenelse{\equal{#1}{1}}%
      {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
      {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
    }
    \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
    \hline%
    \endfirsthead%
    \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
    \hline%
    \endhead%
}{%
    \end{longtabu*}%
    \vspace{6pt}%
}

%...

Я думаю, может быть, ifthen-begin не закрываются закрывающими тегами должным образом? потому что, если я удалю первые ifthens и начну, я заставлю pdflatex работать. Или есть еще что-то? Есть ли в Doxygen ошибка, из-за которой создается недопустимый файл doxygen.sty? Или проблема в другом? Что я могу сделать, чтобы генерация документации работала правильно?

РЕДАКТИРОВАТЬ:

Подробнее, я думаю, что проблема также связана с группировкой, потому что, если я удалю группировки, генерация работает. Итак, defgroup + param с doxygen + pdflatex -> проблемы.


person kamilla    schedule 20.02.2019    source источник
comment
Вы недавно устанавливали / обновляли дистрибутив MikTeX (т.е. после середины декабря 2018 г.)? Проблема с пакетом табу LaTeX вне контроля doxygen из-за изменения в latex3 / latex2e, см. Также проблему doxygen github.com/doxygen/doxygen/issues/6769   -  person albert    schedule 20.02.2019
comment
Я установил новейшие версии всего несколько дней назад и обновил все до последней версии, и я попытался вручную добавить этот настраиваемый пакет tabu, но безуспешно.   -  person kamilla    schedule 20.02.2019
comment
Я думаю, вам нужно перейти на более раннюю версию до середины декабря 2018 года.   -  person albert    schedule 20.02.2019
comment
Это вообще возможно? Где взять старые версии?   -  person kamilla    schedule 20.02.2019
comment
К сожалению, у меня нет опыта понижения / получения старой версии MikTeX (я тоже не исследовал). Возможно, лучше всего заглянуть на сайт MikTex, чтобы узнать, что возможно, или спросить на форуме tex.stackexchange.com. Основная проблема заключается в том, что пакет tabu не поддерживается и сейчас сломан из-за изменения в latex3 / latex2e и знающих людей, которые сделали это github.com/tabu-fixed/tabu занят другой задачей, и сложно исправить пакет tabu (и все взаимодействия).   -  person albert    schedule 20.02.2019
comment
Да вроде бы так. Мне удалось изменить tabu.sty, поэтому я меньше всего могу сгенерировать PDF, но он не выглядит хорошо. Я также исследовал возможность понизить версию MikTex, но, похоже, это непростая задача, и определенно невыполнимая, если даже возможная. Но спасибо! По крайней мере, я знаю первопричину этого, и это лучше, чем ничего.   -  person kamilla    schedule 20.02.2019


Ответы (1)


Все кредиты принадлежат альберту, поскольку проблема заключалась в табу-пакете LaTex, как он предложил. Вот краткое изложение проблемы.

Возникла проблема с пакетом табу LaTeX из-за изменения (декабрь 2018 г.) в latex3 / latex2e (https://github.com/latex3/latex2e/issues/111 и https://github.com/doxygen/doxygen/issues/6769), что приводит к сбою генерации в определенных ситуациях, когда используется 'tabu' (разработчик longtabu-package давно ушел, и пакет не поддерживается больше).

Уже доступен патч (https://github.com/tabu-fixed/tabu) ( и уже обновлен в последней версии MikTek), который исправляет большинство случаев (например, документацию Doxygen, которая не может быть сгенерирована без исправления пакета tabu), но не работает во всех ситуациях. Пример включения таблицы в tabu-environment прерывает генерацию даже с пропатченным tabu-пакетом.

Если патч не устраняет проблему, рекомендуется использовать версию TeX, выпущенную до внесения изменений (https://github.com/latex3/latex2e).

Если переход на более раннюю или более старую (Mik) версию TeX невозможен, одним из способов решения проблемы будет использование какого-либо другого пакета вместо сломанного. Например, написание сценария, который редактирует определения doxygen.sty для тех частей, которые используют longtabu *, и заменяет эти longtabu *: s на {longtable} {| c | c | c | c |} после того, как Doxygen сгенерирует файл doxygen.sty .

person kamilla    schedule 04.03.2019