我目前正在尝试使用 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}
这应该会给你一个更加赏心悦目的结果。
你确实失去了标志上的对齐=
,但是现在它看起来更像是代码的一部分。