我的文件中有很多原始碼區塊(每個區塊至少有 40 行)。我想格式化這些程式碼區塊的部分內容,最好在右側添加一些註解。我正在考慮簡單地在一些線條周圍放置一個彩色框。
有一些規範的方法可以做到這一點嗎?有我可以使用的軟體包嗎?
現在我正在使用listings
包,並且我的文檔中的源代碼按以下方式插入:
\begin{lstlisting}
#include <stdio.h>
#define N 10
/* Block
* comment */
int main()
{
int i;
// Line comment.
puts("Hello world!");
for (i = 0; i < N; i++)
{
puts("LaTeX is also great for programmers!");
}
return 0;
}
\end{lstlisting}
\lstinputlisting[caption=Scheduler, style=customc]{hello.c}
答案1
使用該verbatimbox
包,可以將可選參數(以巨集的形式)傳遞到包的逐字環境。這允許各種定制。在下面的 MWE 中,我測試了程式碼行數。如果它在 8-18 範圍內,則會\colorfield
對清單套用背景。另外,如果程式碼行號在該範圍內,我將套用紅色行號,如果在該範圍之外,我將套用黑色行號(預設沒有行號)。
此外,我還檢查是否在程式碼第 11 行上,我用方框註解提請注意該行。
您可以選擇背景顏色方法、彩色行號方法、突出顯示框方法、所有這三種方法、它們的某種組合或完全不同的方法,所有這些都透過您的巨集定義進行自訂。該包透過計數器追蹤行號VerbboxLineNo
,這可以在您的巨集中使用。
\documentclass{article}
\usepackage{verbatimbox,xcolor,lipsum}
% VERBATIMBOX PREP
\usepackage{verbatimbox}
\def\codesize{\footnotesize}
\newsavebox\thecolorfield
\newcommand\setcolorfield[1][blue!19!gray!18]{%
\savebox{\thecolorfield}{\codesize%
\makebox[0pt][l]{\textcolor{#1}{%
\rule[-\dp\strutbox]{\textwidth}{\dimexpr\ht\strutbox+\dp\strutbox}}}}%
}
\def\colorfield{\usebox{\thecolorfield}}
\setcolorfield
\newcommand*\ifline[4]{%
\ifnum\value{VerbboxLineNo}<#1#4\else
\ifnum\value{VerbboxLineNo}>#2#4\else#3\fi
\fi
}
\newcommand\rednum{\makebox[0ex][r]{\color{red}\arabic{VerbboxLineNo}:}\hspace{1ex}}
\newcommand\blacknum{\makebox[0ex][r]{\arabic{VerbboxLineNo}:}\hspace{1ex}}
\newcommand\boxcomment[1]{\fboxsep=1pt\smash{\rlap{%
\textcolor{red!30}{\rule[-1pt]{.75\textwidth}{1pt}}%
\colorbox{red!30}{\fbox{\parbox[b]{.2\textwidth}{\rmfamily #1}}%
}}}%
}
\newcommand\commentA{\boxcomment{I am drawing attention to ``Hello World''}}
\begin{document}
\lipsum[3]
\begin{verbnobox%
}[\codesize\ifline{8}{18}{\colorfield\rednum}{\blacknum}\ttfamily\ifline{11}{11}{\commentA}{}]
#include <stdio.h>
#define N 10
/* Block
* comment */
int main()
{
int i;
// Line comment.
puts("Hello world!");
for (i = 0; i < N; i++)
{
puts("LaTeX is also great for programmers!");
}
return 0;
}
\end{verbnobox}
\lipsum[4]
\end{document}