[Tex/LaTex] Adding a vertical line between letters on different rows. DNA sequence bases

vertical alignment

Does anyone know how to typeset the following DNA duplex sequence in LaTeX?

I would like to add a vertical line between the bases (letters) like in this picture.

Thanks

DNA Duplex

Here is the other example:

DNA Duplex with modifiers

Best Answer

Here is a version that uses the DNA sequence, splits it into the bases and does the complement as well, each stored in an expl3 - \seq variable.

The display is done with TikZ and building up nodes, the 5' and 3' end markers are added later on.

\documentclass{article}

\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{calc}

\ExplSyntaxOn
\cs_generate_variant:Nn \tl_item:Nn {Nx}

\seq_new:N \l_jpaul_dna_seq
\seq_new:N \l_jpaul_complement_seq

\cs_new:Npn \splitdnaseq #1 {%
  \seq_set_split:Nnn \l_jpaul_dna_seq {} {#1}
  \tl_set:Nn \l_tmpa_tl {#1}
  % Building DNA complement strand
  \tl_replace_all:Nnn \l_tmpa_tl {A} {Q}
  \tl_replace_all:Nnn \l_tmpa_tl {T} {A}
  \tl_replace_all:Nnn \l_tmpa_tl {Q} {T}
  \tl_replace_all:Nnn \l_tmpa_tl {C} {Q}
  \tl_replace_all:Nnn \l_tmpa_tl {G} {C}
  \tl_replace_all:Nnn \l_tmpa_tl {Q} {G}
  % Splitting again and storing to the complement seq
  \seq_set_split:NnV \l_jpaul_complement_seq {} {\l_tmpa_tl}
}

\cs_new:Npn \lengthdna {
  \seq_count:N \l_jpaul_dna_seq
}

\cs_new:Npn \dnaitem #1 {%
  \seq_item:Nn \l_jpaul_dna_seq {#1}
}

\cs_new:Npn \complementitem #1 {%
  \seq_item:Nn \l_jpaul_complement_seq {#1}
}
\ExplSyntaxOff

\NewDocumentCommand{\displaydnaseq}{O{0.2}+m}{%
  \begingroup
  \def\factor{#1}
  \splitdnaseq{#2}
  \begin{tikzpicture}
    \node[red] (5primeleft) at (-\factor,0) {$5'$};
    \foreach \x in {1,...,\lengthdna} {%
      \node[font=\ttfamily,red] (base\x) at (\factor*\x,0)       {\dnaitem{\x}};
      \node[font=\ttfamily,blue] (compbase\x) at (\factor*\x,-1) {\complementitem{\x}};
      \draw[line width=0.7pt] (base\x) -- (compbase\x);
    }
    \node[font=\bfseries,outer sep=0pt,inner sep=0pt,red,right] (3primeright) at ($(base\lengthdna) + (\factor,0)$) {$3'$};
    \node[blue] (3primeleft) at (-\factor,-1) {$3'$};
    \node[font=\bfseries,outer sep=0pt,inner sep=0pt,blue,right] (5primeright) at ($(compbase\lengthdna) + (\factor,0)$) {$5'$};
  \end{tikzpicture}
  \endgroup
}


\begin{document}
\displaydnaseq{TGAATCATTAGCATAG}
\end{document}

enter image description here