答案1
listings
使用包的解决方案草图
正如评论中所建议的,使用该listings
包,您可以使用escapeinside
退出逐字排版上下文的选项来调用输出带圆圈数字的宏。
宏\circled
的灵感来自于这个答案但需要添加一些内容才能使圆圈具有固定大小。背景和文本颜色也可以作为参数传递。
对于列表中某些行后面的带圆圈的注释,escapeinside = {<@}{@>}
设置为转义列表。在这些分隔符内,我们可以使用\lstnote{...}
宏在圆圈内添加固定数量的间距和数字。
对于带圆圈的行号,\circledstyle
我们定义了另一个宏。我们listings
通过添加选项来使用此样式排版行号numberstyle = \circledstyle
。
完整示例文档:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{tikz}
\newcommand\circled[3]{%
\tikz[baseline=(char.base)]{
\node[shape=circle, fill=#1, inner sep=0pt, text width=8pt, align=center]
(char) {\textcolor{#2}{\sffamily\bfseries\scriptsize #3}};
}%
}
\newcommand\lstnote[1]{%
\kern 1.5em%
\circled{purple}{pink!50!white}{#1}%
}
\newcommand\circledstyle[1]{%
\circled{gray}{white}{#1}%
}
\lstset{
basicstyle = \ttfamily,
language = [LaTeX]TeX,
texcsstyle = *\color{blue},
escapeinside = {<@}{@>},
backgroundcolor = \color{lightgray!30!white},
framexleftmargin = 3em,
framerule = 0pt,
frame = tb,
numbers = left,
numberstyle = \circledstyle
}
\begin{document}
\begin{lstlisting}
\documentclass{article} <@ \lstnote{1} @>
\usepackage{xcolor} <@ \lstnote{2} @>
\begin{document}
\textcolor{blue}{Hello world!} <@ \lstnote{3} @>
New paragraph.
And another one.
\end{document}
\end{lstlisting}
\end{document}