Lstlistings:在显示模式下获得漂亮的方程式

Lstlistings:在显示模式下获得漂亮的方程式

我目前正在尝试使用 listings 包打印我的算法。为了清晰起见,我总是尝试将更复杂的数学表达式显示为公式而不是纯代码。这导致我必须将公式转为 latex,以防它对于内联公式来说太大。理论上,使用以下代码一切都运行良好:

\begin{lstlisting}[escapeinside={/*@}{@*/}]
for (j = 1; j <= p; j++) {
    for (m = 0; m <= p-j ; m++) {/*@
    \begin{equation*}\begin{split}
        c &= \frac{t - t_{i - m}}{t_{i - m + p - j+1} - t_{i-m}};\\
        d^{(j)}_m &= (1-c)\cdot d^{(j-1)}_{m+1} + c\cdot d^{(j-1)}_m;
    \end{split}\end{equation*}\stepcounter{lstnumber}\stepcounter{lstnumber}@*/
    }
}
\end{lstlisting}

这给了我以下输出:

结果

正如你所见,结果并不是那么理想。

现在我的问题是:

  • 您知道将方程式插入列表的更优雅的方法吗?
  • 如果不是,那么如果可以将方程式向左移动,那将是一个巨大的收获(我记得在某个地方见过,但我不记得如何做......)
  • 如果您还知道如何插入行号(甚至可以手动插入并“手动”放置它们),那么就可以找到完美的解决方案。

感谢您的所有想法。

PS:如果您感到好奇:该代码是 de Boor 算法的一部分。

答案1

列表有一个选项可以允许列表内使用数学模式:

\begin{lstlisting}[mathescape]
for (j = 1; j <= p; j++) {
    for (m = 0; m <= p-j ; m++) {
        $\displaystyle c = \frac{t - t_{i - m}}{t_{i - m + p - j+1} - t_{i-m}};$
        $\displaystyle d^{(j)}_m = (1-c)\cdot d^{(j-1)}_{m+1} + c\cdot d^{(j-1)}_m;$

    }
}
\end{lstlisting}

这应该会给你一个更加赏心悦目的结果。

你确实失去了标志上的对齐=,但是现在它看起来更像是代码的一部分。

相关内容