具体问题是不能正常设置自动换行,代码高亮也有异常,注释样式也做不出来。模板选用的是这个:
https://www.latexstudio.net/index/details/index?mid=762
下面是出现问题的部分代码与截图(由于多处出现这种问题,只截了一处,所以所截的图并不是这段代码)(以!开头;结尾的语句是lingo中的注释):
\begin{lstlisting}[language=lingo,
basicstyle=\ttfamily,
breaklines=true,
keywordstyle=\bfseries\color{blue},
commentstyle=\itshape\color{black!50!white},
stringstyle=\bfseries\color{PineGreen!90!black},
columns=flexible,
numbers=left,
numbersep=2em,
numberstyle=\footnotesize,
frame=single,
framesep=0.8em
]
model:
sets:
su/1..402/:c,ts,tto,mdr; !k;
endsets
data:
correct=0.1; !修正值,目的是排除掉一个异常数据;
ts,mdr=@ole('1_h_mdr_ts_srabc.xlsx','ts','mdr');
tto=@ole('1_tto.xlsx','tto');
@ole('D:\LINGO64_18\Samples\1_h_mdr_ts_srabc.xlsx','r_1')=c;
enddata
min=@sum(su:c*(ts+correct)/(tto*@sqr(mdr)));
@for(su:@bin(c));
@sum(su:c)=50;
end
\end{lstlisting}
自动换行和代码高亮我试了,只要不用这个模板,然后在导言区加一段代码就可以解决(如果仍然使用这个模板就会报关于xcolor的错)。代码是我在网上找的,如下:
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
\usepackage{geometry}
%\geometry{a4paper,scale=0.8}
\lstset{
language=lingo, % 设置语言
basicstyle=\ttfamily, % 设置字体族
breaklines=true, % 自动换行
keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
morekeywords={sets,endsets,data,enddata,@size,@sum,@for,@bin,@gin},% 设置更多的关键字,用逗号分隔
emph={wszs}, % 指定强调词,如果有多个,用逗号隔开
emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
stringstyle=\bfseries\color{PineGreen!90!black}, % 设置字符串样式,没什么用
columns=flexible, % 缩紧字距
numbers=left, % 显示行号在左边
numbersep=2em, % 设置行号的具体位置
numberstyle=\footnotesize, % 缩小行号
frame=single, % 单个边框
framesep=0.8em} % 设置代码与边框的距离
我先是在overleaf上在线编译,发现了这样的问题,然后又保存下来在本地编译,问题还是没有消失,不知道应该怎么解决。求大佬帮助。
在导言区加上这段代码,可以解决提到的所有问题,顺便把我发现的关键字数量不够的问题也解决了
`definecolor{matlab}{RGB}{0,100,0}
definecolor{lingo}{RGB}{128,0,128}
definecolor{darkgreen}{RGB}{0,100,0}
definecolor{mylightgreen}{RGB}{160,180,160}
lstnewenvironment{matlabcode}[1][]
{
lstset{
language=Matlab,
basicstyle=\small\ttfamily,
columns=fullflexible,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{darkgreen},
stringstyle=\color{matlab},
breaklines=true,
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
showstringspaces=false,
numbers=left,
numberstyle=\tiny\color{gray},
#1
}
}{}
lstdefinelanguage{LINGO}{%
morekeywords={model, end, sets, endsets, data, enddata, calc, endcalc, init, endinit,
@bin, @gin, @bnd, @free, @sum, @for, @sqr, @sqrt, @exp, @ole, @text,
@abs, @sin, @cos, @tan, @log, @sign, @smax, @smin, @floor, @lgm,
@mod, @pow, @psn, @pps, @pbn, @phg, @pfd, @pcx, @ptd, @rand, @qrand, @peb, @pel, @ppl, @pfs, @psl,
@max, @min, @prod, @in, @size, @index, @wrap},
sensitive=false,
morecomment=[l]{!},
morecomment=[s]{/}{/},
morestring=[b]",
}
lstnewenvironment{lingocode}[1][]
{
lstset{
language=Lingo,
basicstyle=\small\ttfamily,
columns=fullflexible,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{mylightgreen},
stringstyle=\color{lingo},
breaklines=true,
breakatwhitespace=false,
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
showstringspaces=false,
numbers=left,
numberstyle=\tiny\color{gray},
#1
}
}{}`
这样能解决高亮的问题,但是自动折行和注释样式都还不正确。
还有就是直接用NavyBlue还会报错,但改为blue就行了,这是什么原因?
代码中已经有了
breaklines=true,
@u30