在包含大量其他内容的文档中,我有以下代码,我将其逐字保留(因为没有其他想法)。如您所见,对齐效果不太好。
我怎样才能使它更美观,以便于阅读,也许带有缩进(verbatim 似乎不能处理空格和制表符)?
\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
逐字
与您在问题中所声称的相反,verbatim 支持空格和缩进,那么为什么不使用它呢?
\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
选择中,然后将制表符替换为 4 个(或任何数字)空格(但只在选择内)。