BHOSC / BUAAthesis

北航毕设论文LaTeX模板
Other
1.02k stars 289 forks source link

伪代码的包algorithm2e和lstlisting不兼容吗 #323

Closed Idolphint closed 1 year ago

Idolphint commented 1 year ago

我想要在论文里插入伪代码,就在sample-master.tex的前面插入了usepackage语句,修改后: `% !Mode:: "TeX:UTF-8" \documentclass[master,openright,twoside,color,AutoFakeBold=true]{buaathesis}

% 参考文献 \usepackage{gbt7714} \usepackage[ruled,linesnumbered]{algorithm2e} % 参考文献输出方式,numerical为按照出现顺序,authoryear为按照作者姓名和年份 \citestyle{numerical}` 在第三章中我成功写入了两段伪代码,而且第四章也存在lstlisting的段落能成功编译。 当我尝试在第三章再加一段lstlisting的时候,写伪代码的地方就全红了,报错:Environment algorithm undefined 还有一堆关于algorithm的语法错误。 请问有办法解决吗

Idolphint commented 1 year ago

好吧通过chatgpt解决了,这是我的聊天记录:

我正在使用latex编写论文,其中有用到伪代码,所以我以\usepackage[ruled,linesnumbered]{algorithm2e}引入了algorithm环境,并编写了一段伪代码,这是那段代码 \begin{algorithm} \SetKwInOut{Input}{input}\SetKwInOut{Output}{output} \SetKwProg{Fn}{Function}{}{end} \SetAlgoLined \caption{枚举流程} \label{tree-search-alg} \If{i=1}{ return C(u)\; } $\Phi \leftarrow 0$\; \ForEach{$v \in C(u)$}{ $flag \leftarrow true$ \; \ForEach{u' $\in N_+^\varphi (u)$}{ \If{e(v,$M[u']\notin E(G)$)} { $flag \leftarrow false$ \; break\; } } } return $\Phi $\; \end{algorithm}我可以保证这段代码不存在algorithm2e范围内的语法错误,因为我曾经成功编译了它。然后我在论文里又加了一段\begin{lstlisting}[ language={C}, caption={图数据输入形式}, label={graph-txt-ex}, ] t 4 5 v 0 0 2 v 1 1 3 v 2 2 3 v 3 3 2 e 0 1 e 0 2 e 1 2 e 1 3 e 2 3 \end{lstlisting}这个时候vscode就报错了,之前写伪代码的部分报错了一片,第一个报错展示在\begin{algorithm}处,内容是Environment algorithm undefined.还有其他的报错似乎是编译器不认识我使用的伪代码语法了。请帮我找出问题

根据您的描述,问题似乎出在引入lstlisting环境之后。我猜测您可能使用了listings宏包来支持源代码格式化的显示。但当algorithm2elistings一起使用时,会有潜在的冲突,导致环境algorithmlistings重新定义,从而出现“Environment algorithm undefined”的错误。

要解决这个问题,您需要确保algorithm2elistings之后加载。换句话说,您需要确保在文档的导言部分,\usepackage[ruled,linesnumbered]{algorithm2e}出现在\usepackage{listings}之后。这样,algorithm2e就会正确地重定义algorithm环境,而不是被listings覆盖。

简单地说,只需要确保您的导言部分的顺序如下:

\usepackage{listings}
\usepackage[ruled,linesnumbered]{algorithm2e}

请注意,包的加载顺序在LaTeX中很重要,因为一些包可能会重定义或修改其他包的命令。确保正确的加载顺序可以避免许多不必要的冲突。