列表中的十六进制行号

列表中的十六进制行号

是否可以使用该listings包以两步的方式引入十六进制行号?

在 MWE 中

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{listings}

\lstset{basicstyle={\ttfamily\small}}
\lstset{keywordstyle={\bfseries}}
\lstset{numbers=left, numberstyle=\sffamily\tiny}

\begin{document}

\begin{lstlisting}[language={[x86masm]Assembler}]
mov ax, [10]
jz 0A
add bx, [11]
dec ax
jmp 02
mov [12], bx
hlt
\end{lstlisting}

\end{document}

我想要实现打印00,,,,,,02而不是阿拉伯行号。0406080A0C

答案1

这是一个使用xintbinhex十六进制数包的解决方案,calc以 2 为步长进行计数,并更新\thelstnumber编号命令,如listings文档中所示:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{listings}
\usepackage{xintbinhex}
\usepackage{calc}

\lstset{basicstyle={\ttfamily\small}}
\lstset{keywordstyle={\bfseries}}
\lstset{numbers=left, numberstyle=\sffamily\tiny}
\renewcommand*\thelstnumber{\ifnum\value{lstnumber}<8 0\fi \xintDecToHex{\the\value{lstnumber}*2}}

\begin{document}

\begin{lstlisting}[language={[x86masm]Assembler},firstnumber=0]
mov ax, [10]
jz 0A
add bx, [11]
dec ax
jmp 02
mov [12], bx
hlt
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

无需任何软件包,使用 TeX 算法,只需付出很少的努力,就可以做到这一点,因此xintbinhex在这里使用它有点过分,但它确实有效。但它没有提供宏来填充给定数量的十六进制数字,我需要在这里对其进行编码。

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{listings}

\lstset{basicstyle={\ttfamily\small}}
\lstset{keywordstyle={\bfseries}}
\lstset{numbers=left, numberstyle=\ttfamily\tiny}

\usepackage{xintbinhex}

\makeatletter
\newcommand\myHexNumber[1]{\ttfamily\tiny
                           \romannumeral\expandafter\myHexNumber@pad
                           \romannumeral0\xintdectohex{#1}.}%
% change 2 into how many hex digits are asked for with leading 0s
% (I guess 2 or 3 ...)
\def\myHexNumber@pad#1.{\xintreplicate{2-\xintLength{#1}}{0}#1}
\makeatother
\begin{document}


\begin{lstlisting}[language={[x86masm]Assembler}, numberstyle=\myHexNumber]
mov ax, [10]
jz 0A
add bx, [11]
dec ax
hjmp 02
mov [12], bx
hlt
\end{lstlisting}

\end{document}

这张图片并不能真正证明它确实有效……但它确实有效,毫无疑问!但这是我错误地使用时造成的\sffamily。现在已更正,\ttfamily请看下一张图片。

在此处输入图片描述

在此处输入图片描述

相关内容