Hexadecimal line numbers in listings
Is it possible to introduce hexadecimal line numbers in steps of two using the listings
package?
In the MWE
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
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}
I would like to achieve that 00
, 02
, 04
, 06
, 08
, 0A
, 0C
is printed instead of arabic line numbers.
listings code line-numbering
add a comment |
Is it possible to introduce hexadecimal line numbers in steps of two using the listings
package?
In the MWE
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
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}
I would like to achieve that 00
, 02
, 04
, 06
, 08
, 0A
, 0C
is printed instead of arabic line numbers.
listings code line-numbering
add a comment |
Is it possible to introduce hexadecimal line numbers in steps of two using the listings
package?
In the MWE
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
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}
I would like to achieve that 00
, 02
, 04
, 06
, 08
, 0A
, 0C
is printed instead of arabic line numbers.
listings code line-numbering
Is it possible to introduce hexadecimal line numbers in steps of two using the listings
package?
In the MWE
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
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}
I would like to achieve that 00
, 02
, 04
, 06
, 08
, 0A
, 0C
is printed instead of arabic line numbers.
listings code line-numbering
listings code line-numbering
edited Jan 26 at 21:02
Jonas Stein
3,20142644
3,20142644
asked Jan 26 at 17:04
MatthiasMatthias
841515
841515
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Here is a solution using packages xintbinhex
for hexadecimal numbers, calc
for counting by steps of 2, and renewing the thelstnumber
command for numbering, as indicated in the listings
documentation:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
usepackage{xintbinhex}
usepackage{calc}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
renewcommand*thelstnumber{ifnumvalue{lstnumber}<8 0fi xintDecToHex{thevalue{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}
I mixed the approaches by JPG and jfbu approaches by usingnewcommandHexLineNum[1]{ifnum#1 < 8 0fixintDecToHex{2 * {#1}}}
andlstset{numbers=left, numberstyle=ttfamilytinyHexLineNum}
.
– Matthias
Jan 26 at 18:15
add a comment |
One could do this with no package and little effort using TeX arithmetic so it is bit overfill to use xintbinhex
here but it works. But it does not provide macros to pad to a given number of hex-digits, I needed to code it here.
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=ttfamilytiny}
usepackage{xintbinhex}
makeatletter
newcommandmyHexNumber[1]{ttfamilytiny
romannumeralexpandaftermyHexNumber@pad
romannumeral0xintdectohex{#1}.}%
% change 2 into how many hex digits are asked for with leading 0s
% (I guess 2 or 3 ...)
defmyHexNumber@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}
This picture does not really prove it does work... but it does, no doubt about it! But it was done when I erroneously used sffamily
. Now corrected to ttfamily
see next image.
1
another method of padding is to add256
to number to convert and then remove the leading1
. Or to add4096
and remove leading 1 if one wants three hex-digits. The method here will silently switch from 2 to 3 or more digits when reachingFF
so I think it is better.
– user4686
Jan 26 at 17:33
Please see my comment to JPG's answer. I think usingnumberstyle
is more versatile when mixing different styles (e.g., for Assembler, Java etc.) in a single document which occurs in my case.
– Matthias
Jan 26 at 18:17
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f471993%2fhexadecimal-line-numbers-in-listings%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Here is a solution using packages xintbinhex
for hexadecimal numbers, calc
for counting by steps of 2, and renewing the thelstnumber
command for numbering, as indicated in the listings
documentation:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
usepackage{xintbinhex}
usepackage{calc}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
renewcommand*thelstnumber{ifnumvalue{lstnumber}<8 0fi xintDecToHex{thevalue{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}
I mixed the approaches by JPG and jfbu approaches by usingnewcommandHexLineNum[1]{ifnum#1 < 8 0fixintDecToHex{2 * {#1}}}
andlstset{numbers=left, numberstyle=ttfamilytinyHexLineNum}
.
– Matthias
Jan 26 at 18:15
add a comment |
Here is a solution using packages xintbinhex
for hexadecimal numbers, calc
for counting by steps of 2, and renewing the thelstnumber
command for numbering, as indicated in the listings
documentation:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
usepackage{xintbinhex}
usepackage{calc}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
renewcommand*thelstnumber{ifnumvalue{lstnumber}<8 0fi xintDecToHex{thevalue{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}
I mixed the approaches by JPG and jfbu approaches by usingnewcommandHexLineNum[1]{ifnum#1 < 8 0fixintDecToHex{2 * {#1}}}
andlstset{numbers=left, numberstyle=ttfamilytinyHexLineNum}
.
– Matthias
Jan 26 at 18:15
add a comment |
Here is a solution using packages xintbinhex
for hexadecimal numbers, calc
for counting by steps of 2, and renewing the thelstnumber
command for numbering, as indicated in the listings
documentation:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
usepackage{xintbinhex}
usepackage{calc}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
renewcommand*thelstnumber{ifnumvalue{lstnumber}<8 0fi xintDecToHex{thevalue{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}
Here is a solution using packages xintbinhex
for hexadecimal numbers, calc
for counting by steps of 2, and renewing the thelstnumber
command for numbering, as indicated in the listings
documentation:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
usepackage{xintbinhex}
usepackage{calc}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=sffamilytiny}
renewcommand*thelstnumber{ifnumvalue{lstnumber}<8 0fi xintDecToHex{thevalue{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}
answered Jan 26 at 17:38
JPGJPG
1,507413
1,507413
I mixed the approaches by JPG and jfbu approaches by usingnewcommandHexLineNum[1]{ifnum#1 < 8 0fixintDecToHex{2 * {#1}}}
andlstset{numbers=left, numberstyle=ttfamilytinyHexLineNum}
.
– Matthias
Jan 26 at 18:15
add a comment |
I mixed the approaches by JPG and jfbu approaches by usingnewcommandHexLineNum[1]{ifnum#1 < 8 0fixintDecToHex{2 * {#1}}}
andlstset{numbers=left, numberstyle=ttfamilytinyHexLineNum}
.
– Matthias
Jan 26 at 18:15
I mixed the approaches by JPG and jfbu approaches by using
newcommandHexLineNum[1]{ifnum#1 < 8 0fixintDecToHex{2 * {#1}}}
and lstset{numbers=left, numberstyle=ttfamilytinyHexLineNum}
.– Matthias
Jan 26 at 18:15
I mixed the approaches by JPG and jfbu approaches by using
newcommandHexLineNum[1]{ifnum#1 < 8 0fixintDecToHex{2 * {#1}}}
and lstset{numbers=left, numberstyle=ttfamilytinyHexLineNum}
.– Matthias
Jan 26 at 18:15
add a comment |
One could do this with no package and little effort using TeX arithmetic so it is bit overfill to use xintbinhex
here but it works. But it does not provide macros to pad to a given number of hex-digits, I needed to code it here.
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=ttfamilytiny}
usepackage{xintbinhex}
makeatletter
newcommandmyHexNumber[1]{ttfamilytiny
romannumeralexpandaftermyHexNumber@pad
romannumeral0xintdectohex{#1}.}%
% change 2 into how many hex digits are asked for with leading 0s
% (I guess 2 or 3 ...)
defmyHexNumber@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}
This picture does not really prove it does work... but it does, no doubt about it! But it was done when I erroneously used sffamily
. Now corrected to ttfamily
see next image.
1
another method of padding is to add256
to number to convert and then remove the leading1
. Or to add4096
and remove leading 1 if one wants three hex-digits. The method here will silently switch from 2 to 3 or more digits when reachingFF
so I think it is better.
– user4686
Jan 26 at 17:33
Please see my comment to JPG's answer. I think usingnumberstyle
is more versatile when mixing different styles (e.g., for Assembler, Java etc.) in a single document which occurs in my case.
– Matthias
Jan 26 at 18:17
add a comment |
One could do this with no package and little effort using TeX arithmetic so it is bit overfill to use xintbinhex
here but it works. But it does not provide macros to pad to a given number of hex-digits, I needed to code it here.
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=ttfamilytiny}
usepackage{xintbinhex}
makeatletter
newcommandmyHexNumber[1]{ttfamilytiny
romannumeralexpandaftermyHexNumber@pad
romannumeral0xintdectohex{#1}.}%
% change 2 into how many hex digits are asked for with leading 0s
% (I guess 2 or 3 ...)
defmyHexNumber@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}
This picture does not really prove it does work... but it does, no doubt about it! But it was done when I erroneously used sffamily
. Now corrected to ttfamily
see next image.
1
another method of padding is to add256
to number to convert and then remove the leading1
. Or to add4096
and remove leading 1 if one wants three hex-digits. The method here will silently switch from 2 to 3 or more digits when reachingFF
so I think it is better.
– user4686
Jan 26 at 17:33
Please see my comment to JPG's answer. I think usingnumberstyle
is more versatile when mixing different styles (e.g., for Assembler, Java etc.) in a single document which occurs in my case.
– Matthias
Jan 26 at 18:17
add a comment |
One could do this with no package and little effort using TeX arithmetic so it is bit overfill to use xintbinhex
here but it works. But it does not provide macros to pad to a given number of hex-digits, I needed to code it here.
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=ttfamilytiny}
usepackage{xintbinhex}
makeatletter
newcommandmyHexNumber[1]{ttfamilytiny
romannumeralexpandaftermyHexNumber@pad
romannumeral0xintdectohex{#1}.}%
% change 2 into how many hex digits are asked for with leading 0s
% (I guess 2 or 3 ...)
defmyHexNumber@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}
This picture does not really prove it does work... but it does, no doubt about it! But it was done when I erroneously used sffamily
. Now corrected to ttfamily
see next image.
One could do this with no package and little effort using TeX arithmetic so it is bit overfill to use xintbinhex
here but it works. But it does not provide macros to pad to a given number of hex-digits, I needed to code it here.
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{listings}
lstset{basicstyle={ttfamilysmall}}
lstset{keywordstyle={bfseries}}
lstset{numbers=left, numberstyle=ttfamilytiny}
usepackage{xintbinhex}
makeatletter
newcommandmyHexNumber[1]{ttfamilytiny
romannumeralexpandaftermyHexNumber@pad
romannumeral0xintdectohex{#1}.}%
% change 2 into how many hex digits are asked for with leading 0s
% (I guess 2 or 3 ...)
defmyHexNumber@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}
This picture does not really prove it does work... but it does, no doubt about it! But it was done when I erroneously used sffamily
. Now corrected to ttfamily
see next image.
answered Jan 26 at 17:21
user4686
1
another method of padding is to add256
to number to convert and then remove the leading1
. Or to add4096
and remove leading 1 if one wants three hex-digits. The method here will silently switch from 2 to 3 or more digits when reachingFF
so I think it is better.
– user4686
Jan 26 at 17:33
Please see my comment to JPG's answer. I think usingnumberstyle
is more versatile when mixing different styles (e.g., for Assembler, Java etc.) in a single document which occurs in my case.
– Matthias
Jan 26 at 18:17
add a comment |
1
another method of padding is to add256
to number to convert and then remove the leading1
. Or to add4096
and remove leading 1 if one wants three hex-digits. The method here will silently switch from 2 to 3 or more digits when reachingFF
so I think it is better.
– user4686
Jan 26 at 17:33
Please see my comment to JPG's answer. I think usingnumberstyle
is more versatile when mixing different styles (e.g., for Assembler, Java etc.) in a single document which occurs in my case.
– Matthias
Jan 26 at 18:17
1
1
another method of padding is to add
256
to number to convert and then remove the leading 1
. Or to add 4096
and remove leading 1 if one wants three hex-digits. The method here will silently switch from 2 to 3 or more digits when reaching FF
so I think it is better.– user4686
Jan 26 at 17:33
another method of padding is to add
256
to number to convert and then remove the leading 1
. Or to add 4096
and remove leading 1 if one wants three hex-digits. The method here will silently switch from 2 to 3 or more digits when reaching FF
so I think it is better.– user4686
Jan 26 at 17:33
Please see my comment to JPG's answer. I think using
numberstyle
is more versatile when mixing different styles (e.g., for Assembler, Java etc.) in a single document which occurs in my case.– Matthias
Jan 26 at 18:17
Please see my comment to JPG's answer. I think using
numberstyle
is more versatile when mixing different styles (e.g., for Assembler, Java etc.) in a single document which occurs in my case.– Matthias
Jan 26 at 18:17
add a comment |
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f471993%2fhexadecimal-line-numbers-in-listings%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown