> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/latex/zh-cn/wen-da/16-how-can-i-include-matlab-code-in-my-latex-document.md).

# 如何在我的 LaTeX 文档中包含 MATLAB 代码？

该 [`matlab-prettifier` 包](https://www.ctan.org/pkg/matlab-prettifier) 可用于排版 MATLAB 代码，并且是针对一个……而编写的 [tex.stackexchange 上的一个问题](https://tex.stackexchange.com/questions/75116/what-can-i-use-to-typeset-matlab-code-in-my-document).

### lstlisting 环境

在将 `matlab-prettifier` 包通过

```latex
\usepackage{matlab-prettifier}
```

之后，你可以使用 `lstlisting` 环境来排版 MATLAB 代码：

```latex
\begin{lstlisting}[<options>]
MATLAB code...
\end{lstlisting}
```

其中 `<options>` 是一个以逗号分隔的参数列表，其值通过键值对设置（即， `parameter=value`).

* **注意**：该 `matlab-prettifier` 包是基于 `listings` 包构建的，从而可以使用 `listings`提供的功能，包括 `<options>` 中的参数 `lstlisting` 环境。不过，有些 `listings` 参数应 *不* 使用，建议读者查阅 [`matlab-prettifier` 文档](http://mirrors.ctan.org/macros/latex/contrib/matlab-prettifier/matlab-prettifier.pdf) 以获取更多细节。

可以使用 `style` 参数来更改排版后 MATLAB 代码的视觉外观，它支持三个值：

* `Matlab-editor`
* `Matlab-bw`
* `Matlab-Pyglike`

以下示例演示如何使用这些样式。

### 示例

下面是一个示例，使用了来自 `matlab-prettifier`其文档中的 MATLAB 代码，其中应用了 `Matlab-editor` 样式：

```latex
\documentclass[a4paper]{article}
\usepackage{matlab-prettifier}
\begin{document}

\begin{lstlisting}[style=Matlab-editor]
%% Sample Matlab code
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
create row vector x, then reverse it
%}
x = linspace(0,1,101);
y = x(end:-1:1);
\end{lstlisting}
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=A+matlab-prettifier+example\&snip=%5Cdocumentclass%5Ba4paper%5D%7Barticle%7D%0A%5Cusepackage%7Bmatlab-prettifier%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cbegin%7Blstlisting%7D%5Bstyle%3DMatlab-editor%5D%0A%25%25+Sample+Matlab+code%0A%21mv+test.txt+test2.txt%0AA+%3D+%5B1%2C+2%2C+3%3B...+foo%0A+++++4%2C+5%2C+6%5D%3B%0As+%3D+%27abcd%27%3B%0Afor+k+%3D+1%3A4%0A++Disp%28s%28k%29%29+%25+bar%0Aend%0A%25%7B%0Acreate+row+vector+x%2C+then+reverse+it%0A%25%7D%0Ax+%3D+linspace%280%2C1%2C101%29%3B%0Ay+%3D+x%28end%3A-1%3A1%29%3B%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

此示例会生成以下输出：

![Overleaf 上 LaTeX 中排版的 MATLAB 代码](/files/46cd88d64329931627b650aea6127636dfaa6118)

下一个示例为 `frame` 和 `numbers` 参数设置了值，这些参数由 `listings` 包提供：

```latex
\documentclass[a4paper]{article}
\usepackage{matlab-prettifier}
\begin{document}

\begin{lstlisting}[
frame=single,
numbers=left,
style=Matlab-Pyglike]
%% Sample Matlab code
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
create row vector x, then reverse it
%}
x = linspace(0,1,101);
y = x(end:-1:1);
\end{lstlisting}
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=A+second+matlab-prettifier+example\&snip=%5Cdocumentclass%5Ba4paper%5D%7Barticle%7D%0A%5Cusepackage%7Bmatlab-prettifier%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cbegin%7Blstlisting%7D%5B%0Aframe%3Dsingle%2C%0Anumbers%3Dleft%2C%0Astyle%3DMatlab-Pyglike%5D%0A%25%25+Sample+Matlab+code%0A%21mv+test.txt+test2.txt%0AA+%3D+%5B1%2C+2%2C+3%3B...+foo%0A+++++4%2C+5%2C+6%5D%3B%0As+%3D+%27abcd%27%3B%0Afor+k+%3D+1%3A4%0A++Disp%28s%28k%29%29+%25+bar%0Aend%0A%25%7B%0Acreate+row+vector+x%2C+then+reverse+it%0A%25%7D%0Ax+%3D+linspace%280%2C1%2C101%29%3B%0Ay+%3D+x%28end%3A-1%3A1%29%3B%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

此示例会生成以下输出：

![Overleaf 上 LaTeX 中排版的 MATLAB 代码](/files/d9982de2b24c00a0f4b42f9fff4bd3552e43d815)

### 使用存储在文件中的 MATLAB 代码

不要将 MATLAB 代码直接包含在你的 LaTeX 文档中，而是使用 `\lstinputlisting` 命令导入并排版外部文件中的代码：

```latex
\lstinputlisting[<options>]{<filename>}
```

其中

* `<options>` 是一个以逗号分隔的参数列表，以键值对形式提供 [（见上文）](#matopts);
* `<filename>` 是包含 MATLAB 代码的文件路径。

例如，要导入文件 `sample.m` 并将其排版为 `Matlab-bw` 该样式，你可以写：

```latex
\lstinputlisting[style=Matlab-bw]{sample.m}
```

下一个示例会在代码周围加上边框，对代码行编号（左侧），并使用 `Matlab-bw` 样式：

```latex
\lstinputlisting[
frame=single,
numbers=left,
style=Matlab-editor
]{sample.m}
```

选择 `在 Overleaf 中打开此示例` 链接（[见下文](#openol)）即可自动创建一个包含 `sample.m` MATLAB 代码文件的 Overleaf 项目。

**`main.tex`**

```latex
\documentclass[a4paper]{article}
\usepackage{matlab-prettifier}
\begin{document}
\title{Importing and typesetting MATLAB code contained in a file}
\lstinputlisting[
frame=single,
numbers=left,
style=Matlab-bw
]{sample.m}

\end{document}
```

**`sample.m`**

```latex
%% Sample Matlab code
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
create row vector x, then reverse it
%}
x = linspace(0,1,101);
y = x(end:-1:1);
```

[在 Overleaf 中打开此示例（它会创建 `sample.m` 文件）。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name\[]=main.tex\&snip\[]=%5Cdocumentclass%5Ba4paper%5D%7Barticle%7D%0A%5Cusepackage%7Bmatlab-prettifier%7D%0A%5Cbegin%7Bdocument%7D%0A%5Ctitle%7BImporting+and+typesetting+MATLAB+code+contained+in+a+file%7D%0A%5Clstinputlisting%5B%0Aframe%3Dsingle%2C%0Anumbers%3Dleft%2C%0Astyle%3DMatlab-bw%0A%5D%7Bsample.m%7D%0A%0A%5Cend%7Bdocument%7D\&snip_name\[]=sample.m\&snip\[]=%25%25+Sample+Matlab+code%0A%21mv+test.txt+test2.txt%0AA+%3D+%5B1%2C+2%2C+3%3B...+foo%0A+++++4%2C+5%2C+6%5D%3B%0As+%3D+%27abcd%27%3B%0Afor+k+%3D+1%3A4%0A++Disp%28s%28k%29%29+%25+bar%0Aend%0A%25%7B%0Acreate+row+vector+x%2C+then+reverse+it%0A%25%7D%0Ax+%3D+linspace%280%2C1%2C101%29%3B%0Ay+%3D+x%28end%3A-1%3A1%29%3B\&main_document=main.tex)

此示例会生成以下输出：

![Overleaf 上 LaTeX 中排版的 MATLAB 代码](/files/48965e838d26215ddcd43239866be92fa768b293)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/latex/zh-cn/wen-da/16-how-can-i-include-matlab-code-in-my-latex-document.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
