Doxygen & (La)Tex - 使用参数标签时无法创建 PDF

Doxygen & (La)Tex - Cannot create PDF when using param-tags

我正在尝试使用 Doxygen 和 MikTex(也经过 Tex Live 测试)从源文件生成 PDF,但没有成功。这是我尝试生成文档的示例文件:

/**
 *  @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 会生成这种导致问题的 doxygen.sty 的 DoxyParams 部分:

%...

% 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-begins 没有用结束标签正确结束?因为如果我删除第一个 ifthens 并开始我让 pdflatex 工作。还是有别的东西? Doxygen 中是否存在生成无效 doxygen.sty 的错误?或者是其他地方的问题?我该怎么做才能使文档生成正常工作?

编辑:

更多信息,我认为这个问题也与分组有关,因为如果我删除分组,生成工作。所以 defgroup + param with doxygen + pdflatex -> problems.

所有功劳都归于 albert,因为正如他所建议的那样,问题是关于 LaTex 禁忌包的。这是关于这个问题的一个小总结。

LaTeX 禁忌包存在问题,由于 latex3/latex2e (https://github.com/latex3/latex2e/issues/111 & https://github.com/doxygen/doxygen/issues/6769) 中的更改 (Dec/2018) 导致在某些情况下生成失败 'tabu'被使用(longtabu-package的开发者很久以前就走了,不再维护该包)。

已经有补丁 (https://github.com/tabu-fixed/tabu) 可用(并且已经在最新的 MikTek 版本中更新)修复了大多数情况(比如 Doxygen 文档,如果不修补 tabu-包),但它并不适用于所有情况。在 tabu-environment 中包含 table 的示例即使使用修补的 tabu-package 也会破坏生成。

如果补丁没有解决问题,建议使用更改前的 TeX 版本 (https://github.com/latex3/latex2e)。

如果降级或使用旧的 (Mik)TeX 版本不是一种选择,一个解决方法是使用其他包而不是损坏的包。例如,编写一个脚本,为那些使用 longtabu* 的部分编辑 doxygen.sty 定义,并在 Doxygen 之后用 {longtable}{|c|c|c|c|} 替换那些 longtabu*:s已生成 doxygen.sty 文件。