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

时间:2019-02-20 06:25:06

标签: latex doxygen tex pdflatex miktex

我正在尝试使用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}%
}

%...

我在想,如果then-begins没有正确地用结束标签关闭?因为如果我删除第一个ifthens并开始,我将使pdflatex正常工作。还是还有其他东西? Doxygen中是否有错误生成了无效的doxygen.sty?还是这个问题在其他地方?我该怎么做才能使文档生成正常工作?

编辑:

更多信息,我认为该问题也与分组有关,因为如果删除分组,则生成有效。所以defgroup + paramoxy和doxygen + pdflatex->问题。

1 个答案:

答案 0 :(得分:2)

由于他所建议的问题与LaTex禁忌包装有关,因此所有功劳归于albert。这是有关此问题的简短摘要。

由于Latex3 / latex2e(https://github.com/latex3/latex2e/issues/111https://github.com/doxygen/doxygen/issues/6769)中的更改(Dec / 2018),导致LaTeX禁忌包出现问题,在某些情况下,当'tabu使用了(longtabu-package的开发者已经有很长时间了,并且不再维护该软件包了。)

已经有可用的补丁(https://github.com/tabu-fixed/tabu)(并且已在最新的MikTek版本中更新),可以解决大多数情况(例如Doxygen文档,如果不对Tabu软件包进行补丁,则无法生成) ,但并非在所有情况下都有效。在禁忌环境中包含表的示例即使使用已修补的禁忌程序包也会中断生成。

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

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