我在 LaTeX 中显示字符时遇到了一些问题。以下是我正在做的事情。
我正在执行二进制加法,并希望所有字符都按一个在另一个之下的方式对齐。
以下是一个小例子:
1010
1000
----
0010
但是,我面临的问题是字符没有在垂直线上对齐。如果是表格,我可以对齐左边缘或右边缘,但这里不行。
我更希望这里 1-1-0、0-0-0、1-0-1、0-0-0 垂直对齐在一行上。
我尝试提供适当的间距,但它在 pdf 中看起来不太美观。它看起来与一长串二进制数字不对齐。
PS:附件是pdf文件的截图。
\documentclass[twoside,english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{2}
\usepackage{babel}
\begin{document}
\newdimen\digitwidth
\settowidth\digitwidth{0}
\def~{\hspace{\digitwidth}}
\def\divrule#1#2{%
\noalign{\moveright#1\digitwidth%
\vbox{\hrule width#2\digitwidth}}}
\begin{tabular}[b]{@{}r@{}}
%10010
\\ \hline
\big|\begin{tabular}[t]{@{}l@{}}
1010 1111\\
1000 1000 \\
\divrule{0}{10}
~~ 1000 1000 \\
\end{tabular}
\end{tabular}
\end{document}
答案1
也许定义一个新的环境
\newlength{\digitwidth}
\newcommand\divrule[2]{\noalign{\moveright#1\digitwidth\vbox{\hrule width#2\digitwidth}}}
\newenvironment{bdivision}[1]
{\settowidth\digitwidth{0}\setlength{\tabcolsep}{\digitwidth}%
\def~{\hspace{\digitwidth}}%
\hphantom{#1~\vrule}\begin{tabular}{l@{}}
\hline\relax\llap{#1~\vrule\strut\hspace{\tabcolsep}\kern-0.4pt}\ignorespaces}
{\end{tabular}}
并输入数据
\begin{bdivision}{10010}
1010~1111~1111~1111~0000~0010\\
1000~1000~0001~0000~1 \\
\divrule{1}{21}
~~10~0111~1110~1111~100 \\
~~10~0010~0000~0100~001 \\
\divrule{3}{27}
~~~~~~101~1110~1011~1010~00
\end{bdivision}
(数字几乎是随机的,但这应该是想法)。
答案2
更新(旧解决方案移至底部)
既然提供了 I MWE,我认为实现这一点的一种方法是采用来自汉明距离在 LaTeX 中的可视化使用了包裹listings
并定义一种迭代每个字符的样式。
每个字符都设置为数字的宽度0
,其他属性可以根据字符进行调整,例如,如果需要,可以单独更改数字的颜色。对于普通数学目的,您只需删除颜色更改代码即可。
随之而来的一个问题是前导空格,因为 TeX 想要吞掉它。为此,我修改了您的解决方案,将 替换为~
适当宽度的空格。这只需要插入前导空格。第一个二进制数字后的任何空格都可以是普通空格(或~
)。
使用此解决方案,使用\ttfamily
是可选的,因为每个数字(和空格)都设置为 0 的宽度,但输出看起来更好,\ttfamily
并且显示的图像反映了这一点。
这是代码的修改版本:
\documentclass[twoside,english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage{listings}
\usepackage{xcolor}% can remove this if you don't want color in output
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{2}
\newdimen\digitwidth%
\settowidth\digitwidth{0}%
\def~{\hspace{\digitwidth}}%
\def\divrule#1#2{%
\noalign{\moveright#1\digitwidth%
\vbox{\hrule width#2\digitwidth}}}%
\newcommand*{\Resize}[1]{\makebox[\digitwidth]{#1}}%
\lstdefinestyle{BinaryNumber}{%
literate={1}{\textcolor{blue}{\Resize{1}}}{1}%
{0}{\textcolor{red}{\Resize{0}}}{1}%
{,}{\Resize{\phantom{ }}}{1}%
{\ }{\Resize{\phantom{ }}}{1},%
basicstyle=\ttfamily,% Optional to use this
}
\newcommand{\Binary}[1]{%
\lstinline[style=BinaryNumber]{#1}%
}
\begin{document}
\Binary{10010}
\begin{tabular}[b]{@{}r@{}}
\\ \hline
\big|%
\begin{tabular}[t]{@{}l@{}}
\Binary{1010 1111}\\
\Binary{1000 1000}\\
\divrule{0}{10}
\Binary{,,,1 0000 1000} \\
\end{tabular}
\end{tabular}
\end{document}
旧解决方案:
这是否会产生您要求的结果:
\documentclass{article}
\begin{document}
With textt:
\texttt{\newline%
1010\newline
1000\newline
----\newline
0010\newline
}
\end{document}
答案3
您有以下几种选择:
使用
tabular
;是的,这是可能的:\documentclass{article} \begin{document} \begin{tabular}{*{4}{@{}c@{}}}% 4 centered columns without interspaced gaps 1&0&1&0 \\ 1&0&0&0 \\ \hline 0&0&1&0 \end{tabular} \end{document}
扩展它以包含不仅仅是 4 位二进制加法也是可能的。使用
array
包裹要定义一个新的列类型B
,我们必须:\documentclass{article} \usepackage{array}% http://ctan.org/pkg/array \newcolumntype{B}{*{4}{@{}c@{}}}% One byte/4 bits \begin{document} \begin{tabular}{B@{~}B@{~}B@{~}B@{~}B}% 5 centered bytes with ~ as gaps 1&0&1&0 & 1&1&1&1 & 1&1&1&1 & 1&1&1&1 & 0&0&0&0 \\ 1&0&0&0 & 1&0&0&0 & 0&0&0&1 & 0&0&0&0 & 1&1&0&1 \\ \hline 0&0&1&1 & 1&0&0&0 & 0&0&0&0 & 1&1&1&1 & 1&1&0&1 \end{tabular} \end{document}
或者您可以使用等宽字体来固定字符宽度:
\documentclass{article} \begin{document} {\noindent\ttfamily 1010 \\ 1000 \\ ---- \\ 0010 } \end{document}
您还可以使用等宽字体来
tabular
更好地表示水平线,从而结合前面提到的示例:\documentclass{article} \begin{document} \ttfamily\begin{tabular}{@{}c@{}} 1010 \\ 1000 \\ \hline 0010 \end{tabular} \end{document}
对于最后两个使用等宽字体的例子,也可以进行类似的更大二进制加法的扩展\ttfamily
。
答案4
我不确定你想要什么,所以这里有一些建议。
矩阵
也许你会乐意使用矩阵,如下所示:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\begin{matrix}
1 & 0 & 1 & 0 \\
1 & 0 & 0 & 0 \\
\hline
0 & 0 & 1 & 0
\end{matrix}
\]
\end{document}
如果您想要更多选择,请查看mathtools
。
逐字
以下可能不是您想要的,而且不太美观。这个想法就是把所有内容都扔进去verbatim
。
\documentclass{article}
\usepackage{verbatim}
\begin{document}
\begin{verbatim}
1010
1000
----
0010
\end{verbatim}
\end{document}