字符对齐问题

字符对齐问题

我在 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}

逐字数字

相关内容