如何在 LaTeX 上编写 Octave 代码?

如何在 LaTeX 上编写 Octave 代码?

下面是我想要编写的代码示例:

clear all; close all; clc;

X = Y = 0:0.1:1;

for i=1:length(X)
  for j=1:length(Y)
    Z(i, j) = X(i) + Y(j);
  endfor
endfor

mesh(Y, X, Z)

问题是 lstlisting 的列表不带颜色,我希望我的代码能够与 Octave 上显示的完全一致(几乎与 Matlab 相同的环境)。我该怎么做?

答案1

我建议使用minted不是 lstlisting因为代码更容易从 PDF 中复制并运行。从lstlisting会产生许多代码运行前必须修复的错误。Minted 有多种样式,因此您可以选择最喜欢的样式来突出显示。Overleaf 有一个参考指南所有 minted 样式。此外,minted 还支持该octave语言。

在此处输入图片描述

这里是代码:

\documentclass[a4paper]{article}
\usepackage{minted}
\usepackage{xcolor}
\usemintedstyle{manni} 
\definecolor{LightGray}{rgb}{0.95,0.95,0.95}

\begin{document}

\begin{listing}[!htb]

\begin{minted}[
bgcolor=LightGray,
breaklines,
breaksymbolleft={},
breakindent={15pt}
]{octave}
clear all; close all; clc;

X = Y = 0:0.1:1;

for i=1:length(X)
  for j=1:length(Y)
    Z(i, j) = X(i) + Y(j);
  endfor
endfor

mesh(Y, X, Z)
\end{minted}

% \inputminted[%
% firstline=, 
% lastline=,
% bgcolor=LightGray,
% breaklines,
% breaksymbolleft={},
% breakindent={15pt}
% ]{octave}{Folder/file}

\caption{Code}
\label{listing:1}
\end{listing}

\end{document}

以下是从环境中复制的代码lstlisting

c l e a r a l l ; c l o s e a l l ; c l c ;
X = Y = 0 : 0 . 1 : 1 ;
for i =1: length (X)
for j =1: length (Y)
Z( i , j ) = X( i ) + Y( j ) ;
endfor
endfor
mesh(Y, X, Z)

minted这是从环境中复制的代码:

clear all; close all; clc;
X = Y = 0:0.1:1;
for i=1:length(X)
for j=1:length(Y)
Z(i, j) = X(i) + Y(j);
endfor
endfor
mesh(Y, X, Z)

还存在一些lstlisting未在此示例中显示的其他问题:

  1. 所有减号 (-) 都会变成连字符(稍长),必须替换
  2. 所有乘法符号 (*) 由于某种原因停止工作,必须更换

我曾经不得不从lstlisting环境中复制并运行代码(我只有一个 PDF),并且必须修复 100 多个错误才能运行代码。几乎所有这些错误都可以通过使用minted而不是 来避免lstlisting

相关内容