5

I am having some trouble in displaying characters in LaTeX. Here is what I am doing.

I am performing a binary addition and would like to have all the characters aligned one below the other.

Here is the small example :

1010
1000 
----
0010

However, the problem I am facing is that the characters are not aligned in a vertical line. If it was a table, I could align left-edge or right edge, but not here.

I would prefer, here, 1-1-0, 0-0-0, 1-0-1, 0-0-0 are aligned in a single line vertically.

I am trying to give proper spacing, but it does not look elegant in the pdf. It looks misaligned with a long sequence of binary number.

P.S : Attached is the screen shot of the pdf file. enter image description here

\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}

4 Answers4

6

Perhaps defining a new environment

\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}}

and inputting data as

\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}

(the digits are almost at random, but this should be the idea).

enter image description here

egreg
  • 1,121,712
4

Update (old solution moved to bottom)

Now that I MWE was provided, I think one way to do this is to adapt the solution from Visualization in LaTeX of hamming distance which used the listings package and define a style that iterates over each character.

Each character is set in the width of the digit 0, and other properties can be adjusted based on the character, such as changing the color of the digits separately if you want. For normal math purposes you can just remove the color change code.

One problem that comes about is the leading spacing as TeX wants to gobble that up. For this, I adapted your solution by replacing a ~ with a space of the appropriate width. This only needs to be inserted for leading spaces. Any spaces after the first binary digit can just be a normal space (or a ~).

With this solution, the use of the \ttfamily is optional, since each digit (and space) is set to be the width of a 0, but the output looked the better with \ttfamily and the image shown reflects that.

enter image description here

Here is the modified version of your code:

\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}

Old Solution:

Does this produces the results you ask for:

\documentclass{article} 
\begin{document}
With textt:
\texttt{\newline%
1010\newline
1000\newline
----\newline
0010\newline
}
\end{document} 

enter image description here

Peter Grill
  • 223,288
3

You have a couple of options here:

  • Using a tabular; yes, this is possible:

    \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}
    

    tabular for binary addition

    Extending this to incorporate more than just a 4-bit binary addition is also possible. Using the array package to define a new column type B, we have:

    \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}
    

    larger binary addition

  • Or you could fix the character width by using a mono-spaced font:

    \documentclass{article}
    \begin{document}
    {\noindent\ttfamily
      1010 \\
      1000 \\
      ---- \\
      0010
    }
    \end{document}
    

    mono-spaced font "table"

    You could also use this mono-spaced in a tabular for better horizontal line representation, thereby combining the aforementioned examples:

    \documentclass{article}
    \begin{document}
    \ttfamily\begin{tabular}{@{}c@{}}
      1010 \\
      1000 \\ \hline
      0010
    \end{tabular}
    \end{document}
    

    mono-spaced tabular

Similar extensions to larger binary additions are also possible for the last two examples that use mono-spaced \ttfamily.

Moriambar
  • 11,466
Werner
  • 603,163
  • Thank you so much, I am trying you first approach. If I insert just space, the binary sequences are not aligned on a vertical line. with & character, it is working pretty fine. Thank you. BTW, I tried with "~" as well. I am not an expert in this. – www.sapnaedu.in Sep 29 '11 at 20:29
  • Inserting a space at the end would cause a problem, for sure. That is because you're increasing the width of the final element. You would have to modify the tabular column specification for this. I'll update my answer to include something like this, for what it's worth. – Werner Sep 30 '11 at 05:11
2

I'm not sure what you want, so here's some suggestions.

Matrices

Maybe you'll be happy using matrices as in:

\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}

A matrix

If you want more options check out mathtools.

Verbatim

The following is probably not what you want and it's not pretty. The idea is just throw everything in verbatim.

\documentclass{article}

\usepackage{verbatim}

\begin{document}

\begin{verbatim}
1010
1000 
----
0010
\end{verbatim}

\end{document}

Verbatim digits

egreg
  • 1,121,712
N.N.
  • 36,163