> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-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 代码……
\end{lstlisting}
```

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

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

排版后的 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]
%% MATLAB 示例代码
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
创建行向量 x，然后将其反转
%}
x = linspace(0,1,101);
y = x(end:-1:1);
\end{lstlisting}
\end{document}
```

&#x20;[在 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)

下一个示例为以下内容设置了 `框架` 和 `行号` 参数，由 `listings` 宏包的示例代码：

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

\begin{lstlisting}[
frame=single,
numbers=left,
style=Matlab-Pyglike]
%% MATLAB 示例代码
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
创建行向量 x，然后将其反转
%}
x = linspace(0,1,101);
y = x(end:-1:1);
\end{lstlisting}
\end{document}
```

&#x20;[在 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)）自动创建一个包含以下内容的 Overleaf 项目： `sample.m` MATLAB 代码文件。

**`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
%% MATLAB 示例代码
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
创建行向量 x，然后将其反转
%}
x = linspace(0,1,101);
y = x(end:-1:1);
```

&#x20;[在 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://overleaf-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.
