输出使用了太多的水平间距。有没有办法使用内部空间较小的框?也许我应该使用另一种方法来格式化我的输出...用tabularray
?欢迎任何建议。
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{color}
\newcommand\decopower[2]{%
\overset{\raisebox{2pt}{\tiny\color{blue}\fbox{#2}}}{#1}}
\begin{document}
$(\decopower{1}{6}
\decopower{0}{5}
\decopower{0}{4}
\decopower{1}{3}
\decopower{1}{2}
\decopower{0}{1}
\decopower{1}{0})_2$
\end{document}
答案1
完全自动化的版本。抱歉\foo
,请选择一个更好的名称。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\foo}{mm}
{% #1 = positive integer, #2 = radix
( \projetmbc_foo:nn { #1 } { #2 } )\sb{#2}
}
\tl_new:N \l__projetmbc_foo_tl
\dim_new:N \__projetmbc_foo_wd_dim
\cs_new_protected:Nn \projetmbc_foo:nn
{
\tl_set:Nx \l__projetmbc_foo_tl { \int_to_base:nn { #1 } { #2 } }
\hbox_set:Nn \l_tmpa_box { \tiny \int_eval:n { \tl_count:N \l__projetmbc_foo_tl - 1 } }
\dim_set:Nn \__projetmbc_foo_wd_dim { \box_wd:N \l_tmpa_box + 2pt }
\int_step_inline:nnnn { \tl_count:N \l__projetmbc_foo_tl - 1 } { -1 } { 0 }
{
\overset
{% the index
\hbox:n { \color{blue!80!red} \__projetmbc_foo_index:n { ##1 } }
}
{
\tl_item:Nn \l__projetmbc_foo_tl { \tl_count:N \l__projetmbc_foo_tl - ##1 }
}
}
\hspace{\fboxrule}
}
\cs_new_protected:Nn \__projetmbc_foo_index:n
{
\dim_set:Nn \fboxsep { 1pt }
\framebox[\__projetmbc_foo_wd_dim]{ \tiny #1 }
\hspace { -\fboxrule }
}
\ExplSyntaxOff
\begin{document}
\begin{gather*}
\foo{147}{2} \\
\foo{147}{3} \\
\foo{12345}{2} \\
\foo{12345}{3} \\
\foo{12345}{4} \\
\foo{12345}{8}
\end{gather*}
\end{document}
答案2
这就是你所想的吗?
\documentclass{article}
\usepackage{tikz}
\newcommand{\decopower}[2][]{\tikz[baseline, anchor=base]{
\foreach \d[count=\n] in {#2}{\xdef\nn{\n}}
\foreach \d[count=\n, evaluate=\n as \m using int(\nn-\n)] in {#2}{
\node[inner sep=0, label={[draw, blue, inner sep=1pt, outer sep=1pt, font=\tiny]90:\m}] at (\n/4,0){\d};
}}}
\begin{document}
$(\decopower{1,0,0,1,1,0,1})_2
\quad
(\decopower{1,0,2,0,0,2,1,2,1})_3$
\end{document}