在包含許多其他內容的文件中,我有以下程式碼,我逐字保留了這些程式碼(由於缺乏其他想法)。正如您所看到的,對齊看起來不太好。
我如何使它更美觀,以便它變得更具可讀性,也許帶有縮排(逐字記錄似乎不處理空格和製表符)?
\documentclass[]{article}
\begin{document}
\begin{verbatim}
if (n == 0 || n == 1){
return n;
}
j = 0;
for (i = 0; i < n-1; i++){
if (arr[i] != arr[i+1]){
arr[j] = arr[i];
j++;
}
}
arr[j++] = arr[n-1];
\end{verbatim}
\end{document}
答案1
像這樣的東西嗎?
\documentclass{book}
\usepackage{listings}
\lstdefinestyle{myListingStyle}
{
basicstyle = \small\ttfamily,
breaklines = true,
}
\begin{document}
\begin{lstlisting}[
style = myListingStyle,
caption = {Nice listing.}
]
if (n == 0 || n == 1){
return n;
}
j = 0;
for (i = 0; i < n-1; i++){
if (arr[i] != arr[i+1]){
arr[j] = arr[i];
j++;
}
}
arr[j++] = arr[n-1];
\end{lstlisting}
\end{document}
看在 Latex 文件中的程式碼摘錄後面放置灰色背景(就像這個網站所做的那樣)例如新增背景顏色。也可以從外部文件載入程式碼——只需查看相關問題即可。
答案2
逐字
與您在問題中聲稱的相反,逐字支持空格和縮進,那麼為什麼不使用它呢?
\documentclass[]{article}
\begin{document}
\begin{verbatim}
if (n == 0 || n == 1){
return n;
}
j = 0;
for (i = 0; i < n-1; i++){
if (arr[i] != arr[i+1]){
arr[j] = arr[i];
j++;
}
}
arr[j++] = arr[n-1];
\end{verbatim}
\end{document}
房源
包裝listings
可以添加顏色。
\documentclass[]{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{basicstyle=\ttfamily,language=c,keywordstyle=\color{blue}}
\begin{document}
\begin{lstlisting}
if (n == 0 || n == 1){
return n;
}
j = 0;
for (i = 0; i < n-1; i++){
if (arr[i] != arr[i+1]){
arr[j] = arr[i];
j++;
}
}
arr[j++] = arr[n-1];
\end{lstlisting}
\end{document}
鑄造
該minted
軟體包更強大...
% arara: pdflatex: {shell: yes}
\documentclass[]{article}
\usepackage{minted}
\begin{document}
\begin{minted}{c}
if (n == 0 || n == 1){
return n;
}
j = 0;
for (i = 0; i < n-1; i++){
if (arr[i] != arr[i+1]){
arr[j] = arr[i];
j++;
}
}
arr[j++] = arr[n-1];
\end{minted}
\end{document}
清單
你當然可以將它與 tcolorbox 或其他東西結合起來...
% arara: pdflatex: {shell: yes}
\documentclass[]{article}
\usepackage{minted}
\usepackage[minted]{tcolorbox}
\newtcblisting{mylisting}{listing only,listing engine=minted, minted language=c,colback=gray!20}
\begin{document}
\begin{mylisting}
if (n == 0 || n == 1){
return n;
}
j = 0;
for (i = 0; i < n-1; i++){
if (arr[i] != arr[i+1]){
arr[j] = arr[i];
j++;
}
}
arr[j++] = arr[n-1];
\end{mylisting}
\end{document}
答案3
正如其他人已經說過的,verbatim
確實適用於程式碼(我將其用於此目的)。您看到的問題是,您通常使用製表符格式化程式碼,但verbatim
由於某種原因而忽略了製表符。所以我所做的就是將我的程式碼放入verbatim
select 它並用 4 個(或任何數量的)空格替換製表符(但只是在選擇範圍內)。