
Antwort1
Mit einer Kombination aus \overset
und \substack
können Sie die Beschriftungen und Pfeile über den jeweiligen Ziffern positionieren. Um sicherzustellen, dass die Beschriftungen den Abstand zwischen den Ziffern nicht beeinflussen, verwenden Sie \mathclap
. Wenn Sie viele solcher Fälle haben, ist es sinnvoll, ein Makro zu definieren, das zwei Argumente annimmt – die Beschriftung und die Ziffer.
\documentclass{article}
\usepackage{mathtools} % to access \overset, \substack, \mathclap, and \text macros
\newcommand\bitpos[2]{%
\overset{\substack{\mathclap{\text{\tiny #1}}\\ \downarrow}}{#2}}
\begin{document}
$\bitpos{MSB}{1}001100\bitpos{LSB}{1}$
\end{document}
Nachtrag: Der oben gezeigte Code geht davon aus, dass \bitpos
er im Mathematikmodus verwendet wird. Wenn das nicht unbedingt der Fall ist, geben Sie einfach \ensuremath{...}
auch eine Wrapper-Anweisung an, d. h. definieren Sie sie \bitpos
wie folgt:
\newcommand\bitpos[2]{%
\ensuremath{\overset{\substack{\mathclap{\text{\tiny #1}}\\ \downarrow}}{#2}}}
Antwort2
Vielleicht etwas länger als erwartet, aber hey, Sie erhalten eine automatische Konvertierung und optionale Entfernung der Beschriftungen.
\documentclass{article}
\usepackage{amsmath,xparse}
\ExplSyntaxOn
\NewDocumentCommand{\bits}{O{}m}
{
\group_begin:
\keys_set:nn { chekooo/bits } { #1 }
\chekooo_bits:n { #2 }
\group_end:
}
\keys_define:nn { chekooo/bits }
{
convert .bool_set:N = \l_chekooo_convert_bool,
convert .initial:n = false,
convert .default:n = true,
nosb .bool_set:N = \l_chekooo_show_bool,
nosb .initial:n = false,
nosb .default:n = true,
}
\cs_new_protected:Nn \chekooo_bits:n
{
\bool_if:NTF \l_chekooo_convert_bool
{
\chekooo_process:f { \int_to_bin:n { #1 } }
}
{
\chekooo_process:n { #1 }
}
}
\cs_new_protected:Nn \chekooo_process:n
{
\bool_if:NTF \l_chekooo_show_bool
{
#1
}
{
\chekooo_bits_show:n { #1 }
}
}
\cs_generate_variant:Nn \chekooo_process:n { f }
\cs_new_protected:Nn \chekooo_bits_show:n
{
\int_compare:nTF { \tl_count:n { #1 } < 2 }
{
#1
}
{
\__chekooo_bits_show:n { #1 }
}
}
\cs_new_protected:Nn \__chekooo_bits_show:n
{
\seq_set_split:Nnn \l__chekooo_bits_seq { } { #1 }
\seq_pop_left:NN \l__chekooo_bits_seq \l__chekoo_msb_tl
\seq_pop_right:NN \l__chekooo_bits_seq \l__chekoo_lsb_tl
\mspace{10mu} % for the M
\overset
{
\substack{\scriptscriptstyle\hidewidth\mathrm{MSB}\hidewidth\\\downarrow}
}
{\l__chekoo_msb_tl}
\mspace{8mu}
\seq_use:Nn \l__chekooo_bits_seq { \mspace{8mu} }
\mspace{8mu}
\overset
{
\substack{\scriptscriptstyle\hidewidth\mathrm{LSB}\hidewidth\\\downarrow}
}
{\l__chekoo_lsb_tl}
\mspace{8mu}
}
\seq_new:N \l__chekooo_bits_seq
\tl_new:N \l__chekoo_msb_tl
\tl_new:N \l__chekoo_lsb_tl
\ExplSyntaxOff
\begin{document}
\[
\bits{1001}+
\bits[nosb]{1001}+
\bits[convert]{42}+
\bits[convert,nosb]{42}
\]
\[
\bits{0}+\bits{1}+\bits{10}+\bits{11}+\bits{100}
\]
\end{document}