Chuyển đến nội dung

Thuật toán và mã giả

Đặt mã giả trong môi trường algorithm kèm \caption để có "Algorithm 1"; bên trong đó, Scissor LaTeX chỉ đọc các lệnh viết hoa của algorithmic (\STATE, \FOR) trong bố cục hội nghị, nên với các tài liệu khác hãy đặt các bước trong một khối verbatim.

Môi trường algorithm

Gói algorithm cung cấp một môi trường có đánh số cho mã giả, giống như một hình: \caption gán cho nó một số ("Algorithm 1"), và \label đặt sau chú thích cho phép bạn tham chiếu đến nó bằng \ref. Trong Scissor LaTeX, thuật toán nằm đúng chỗ bạn viết và chú thích của nó được đặt bên dưới.

Nội dung bên trong phụ thuộc vào gói bạn dùng để viết các bước, và mức hỗ trợ khác nhau chính ở chỗ đó:

GóiLệnhTrong Scissor LaTeX
algorithmmôi trường algorithm, \caption, \labelHoạt động: đánh số "Algorithm N", chú thích bên dưới.
algorithmic\STATE, \IF, \FOR, \WHILE, \RETURN ... (viết hoa)Một phần: chỉ được đọc trong tài liệu có bố cục hội nghị; ở nơi khác chúng là lệnh không xác định.
algpseudocode (algorithmicx)\State, \If, \For, \EndFor, \Return ...Không hỗ trợ: bị bỏ qua kèm thông báo, và các bước bị dồn vào một dòng.
algorithm2e\KwIn, \For{..}{..}, \eIf ...Không hỗ trợ: bị bỏ qua kèm thông báo.

Mã giả dùng được ở mọi nơi

Cách đáng tin cậy nhất để trình bày mã giả trong bất kỳ tài liệu Scissor LaTeX nào là một khối verbatim bên trong algorithm. Bạn giữ được số và chú thích, còn các dòng giữ nguyên thụt lề.

Thuật toán với các bước dạng verbatim

LaTeXPhần mở đầu: \usepackage{algorithm}Mở trong trình soạn (mở trong thẻ mới)
\begin{algorithm}
\caption{Sum of a list}
\label{alg:sum}
\begin{verbatim}
s := 0
for each a in xs:
    s := s + a
return s
\end{verbatim}
\end{algorithm}
Algorithm~\ref{alg:sum} adds the numbers of a list.
Dàn trang bởi Scissor LaTeX: Thuật toán với các bước dạng verbatim

Với mã giả có công thức, lstlisting hoạt động theo cùng cách, hoặc bạn có thể viết các bước thành văn bản thường bên ngoài môi trường algorithm, dưới dạng danh sách đánh số.

Các bước dạng danh sách đánh số, kèm toán

\textbf{Input:} numbers $a_1, \dots, a_n$.
\begin{enumerate}
  \item Set $s \gets 0$.
  \item For $i = 1, \dots, n$: set $s \gets s + a_i$.
  \item Return $s$.
\end{enumerate}
Dàn trang bởi Scissor LaTeX: Các bước dạng danh sách đánh số, kèm toán

algorithmic trong bố cục hội nghị

Các bố cục mô phỏng hội nghị (arXiv, IEEE, NeurIPS, ICML và các bố cục khác) đọc các lệnh viết hoa của gói algorithmic: các từ khóa như for, do, end for và return được in đậm, và mỗi lệnh bắt đầu một dòng mới. Số dòng không được vẽ, và các dòng được căn giữa. Thẻ Sự cố cho biết tên bố cục đang dùng.

algorithmic trong tài liệu kiểu arXiv

\documentclass{article}
\usepackage{arxiv}
\usepackage{algorithm,algorithmic}
\begin{document}
\begin{algorithm}
\caption{Sum of a list}
\begin{algorithmic}
\STATE $s \gets 0$
\FOR{$i = 1$ to $n$}
  \STATE $s \gets s + a_i$
\ENDFOR
\RETURN $s$
\end{algorithmic}
\end{algorithm}
\end{document}
Dàn trang bởi Scissor LaTeX: algorithmic trong tài liệu kiểu arXiv

Thẻ Sự cố: Layout in the style of the arXiv preprint style (final mode). Not official. To compile elsewhere, add arxiv.sty from github.com/kourgeorge/arxiv-style.

algpseudocode không được hỗ trợ

algpseudocode, gói phổ biến nhất trong các bài báo gần đây, dùng các lệnh viết hoa lẫn thường như \State và \EndFor. Scissor LaTeX không biết các lệnh này: tên của chúng bị bỏ qua, công thức và từ ngữ được giữ lại, và mọi thứ bị dồn vào một dòng. Thẻ Sự cố liệt kê các lệnh bị bỏ qua.

algpseudocode: các bước bị dồn lại với nhau

LaTeXPhần mở đầu: \usepackage{algorithm,algpseudocode}Mở trong trình soạn (mở trong thẻ mới)
\begin{algorithm}
\caption{Sum of a list}
\begin{algorithmic}[1]
\State $s \gets 0$
\For{$i = 1$ to $n$}
  \State $s \gets s + a_i$
\EndFor
\State \Return $s$
\end{algorithmic}
\end{algorithm}

Thẻ Sự cố: Skipped 4 unknown commands: \State, \For, \EndFor, \Return

Nếu bạn cần tài liệu hoạt động cả ở đây lẫn trong một bản cài đặt TeX, hãy viết các bước trong verbatim như ở trên; cách này biên dịch được ở mọi nơi.

Khác biệt so với một bản cài đặt TeX

Trang về gói là algorithm, algorithmic và algpseudocode. Tài liệu hướng dẫn có trên CTAN: algorithms, algorithmicx và algorithm2e.

Xem thêm các gói thuật toán, Mã nguồn chương trình và Bố cục hội nghị.

Hỏi và đáp

Làm thế nào để viết một thuật toán trong LaTeX?

Dùng môi trường algorithm kèm \caption, rồi đặt các bước vào bên trong. Trong Scissor LaTeX, các bước hoạt động tốt nhất trong một khối verbatim, hoặc với các lệnh \STATE của algorithmic trong bố cục hội nghị.

Vì sao các dòng \State của tôi bị dồn lại với nhau?

\State đến từ algpseudocode, gói mà Scissor LaTeX không hỗ trợ. Tên lệnh bị bỏ qua, nên các bước nối thành một dòng. Hãy dùng verbatim cho các bước thay thế.

Tôi có thể tham chiếu đến một thuật toán bằng số không?

Có. Đặt \label{alg:name} sau \caption và viết Algorithm~\ref{alg:name}.

Mọi ví dụ trên trang này đều được Scissor LaTeX dàn trang khi xây dựng trang web. Cập nhật lần cuối 2026-11-07.