我正在写一些关于进制转换(从十进制到其他进制)的内容。我正在使用 xlop 包来生成一系列长除法。结果不错,但如果我能在余数(以及最后一个除法的商)周围画一个圆圈,即转换后的数字,那就完美了。也就是说,我想要这样的东西:
我的代码是
\begin{align*}
\opidiv[displayintermediary=all,voperation=top]{196101}{16}
\quad
\opidiv[displayintermediary=all,voperation=top]{12256}{16}
\quad
\opidiv[displayintermediary=all,voperation=top]{766}{16}
\quad
\opidiv[displayintermediary=all,voperation=top]{47}{16}
\quad
\end{align*}
我知道应该有使用 pstricks 和类似包的方法,但我不知道如何使用它们。我希望有人能帮助我。
答案1
这是一个使用、参数允许TiKz
的数字风格化的解决方案。xlop
operandstyle
remainderstyle
使用 时xlop
,当通过宏应用数字样式时,最后一个参数(要样式化的数字)会自行提供xlop
给该宏。
因此,宏声明有 2 个参数,但只有第一个参数提供给其调用,而xlop
宏本身提供最后一个参数。
我创建了两个宏:
- 第一个调用的宏使用
\chiffre
TiKz 创建一个以数字本身为中心的节点。 - 第二个函数
\entoure
创建一个形状节点,该节点围绕作为参数给出的两个节点。它使用 tikz 库fit
和shapes
。
这些命令需要双重编译将节点放置在正确的位置。
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{fit,shapes}
\usepackage{xlop}
\newcommand{\chiffre}[2]{\tikz[remember picture] \node[inner sep=0pt](#1){#2};}
\newcommand{\entoure}[2]{\tikz[remember picture,overlay] \node[preaction={draw=black,ultra thick,opacity=.2,
transform canvas={xshift=1.5pt,yshift=-1.5pt}},draw,ellipse,ultra thick,inner sep=.5em,fit=(#1.center)(#2.center)]{} ;}
\begin{document}
\begin{align*}
\opidiv[displayintermediary=all,voperation=top,remainderstyle.5.1=\chiffre{A}]{196101}{16}
\entoure{A}{A}
\quad
\opidiv[displayintermediary=all,voperation=top,remainderstyle.3=\chiffre{B}]{12256}{16}
\entoure{B}{B}
\quad
\opidiv[displayintermediary=all,voperation=top,remainderstyle.2.1=\chiffre{C},remainderstyle.2.2=\chiffre{D}]{766}{16}
\entoure{C}{D}
\quad
\opidiv[displayintermediary=all,voperation=top,remainderstyle.1.1=\chiffre{E},remainderstyle.1.2=\chiffre{F},resultstyle.1=\chiffre{G}]{47}{16}
\entoure{F}{E}
\entoure{G}{G}
\quad
\end{align*}
\end{document}
输出:
答案2
事实上,这并不容易。在一个数字周围画一个圆(或椭圆)是直线(使用 pstricks,我相信使用 TikZ 也是如此)。在两个数字周围画一个椭圆更难,因为在输入一个数字和输入下一个数字之间有很多操作。以下是一个可能的答案:
\documentclass{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage{xlop}
\usepackage{pst-node, pstricks-add}
\begin{document}
\begin{center}
\psset{boxsep=false,framesep=1pt, linecolor=red, linewidth=1.5pt}
\opset{displayintermediary=all, voperation=top}%
\opidiv[remainderstyle.5=\psovalbox]{196101}{16}%
\quad
\opidiv[remainderstyle.3=\psovalbox]{12256}{16}%
\quad
\opidiv[remainderstyle.2.1={\pnode(-1.5\opcolumnwidth,0.5ex){L}},
remainderstyle.2.2={\pnode(2.2\opcolumnwidth,0.5ex){R}}]
{766}{16}%
\psRelNode(L)(R){0.5}{M}
\psccurve(L)([offset=-1.5ex]M)(R)([offset=1.5ex]M)
\quad
\opidiv[resultstyle=\psovalbox,
remainderstyle.1.1={\pnode(-1.5\opcolumnwidth,0.5ex){L}},
remainderstyle.1.2={\pnode(2.2\opcolumnwidth,0.5ex){R}}]
{47}{16}%
\psRelNode(L)(R){0.5}{M}
\psccurve(L)([offset=-1.5ex]M)(R)([offset=1.5ex]M)
\end{center}
\end{document}