Doxygen&(La)Tex - 使用param-tags时无法创建PDF

问题描述 投票:2回答:1

我正在尝试使用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会生成这种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没有用end-tags正确关闭?因为如果我删除第一个ifthens并开始我得到pdflatex工作。或者还有其他什么? Doxygen中是否存在产生无效doxygen.sty的错误?或者是其他地方的问题?我该怎么做才能使文档生成正常工作?

编辑:

更多信息,我认为该问题也与分组有关,因为如果我删除分组,那代就可以了。所以defgroup + param与doxygen + pdflatex - >问题。

latex doxygen tex pdflatex miktex
1个回答
3
投票

所有的学分都归albert所有,因为他提出的问题是关于LaTex禁忌包。以下是有关该问题的小摘要。

由于latex3 / latex2e(https://github.com/latex3/latex2e/issues/111https://github.com/doxygen/doxygen/issues/6769)中的更改(2003年12月)导致生成在使用'tabu'的某些情况下失败(Longtabu-package的开发人员已有),因此LaTeX禁忌包存在问题很久以前就去了,包裹不再维护了。

已经有补丁(https://github.com/tabu-fixed/tabu)可用(并且已经在最新的MikTek版本中更新)修复了大多数情况(比如Doxygen文档,如果没有修补tabu-package就无法生成),但它不起作用在所有情况下。禁忌环境中包含表格的示例即使使用修补的tabu-package也会破坏生成。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.