Mark at multiple positions

I would do that slightly differently. I would store the information which protein should be at which position in a list, and instruct the markings to use this list. I added a command \somein, which takes one argument expands to \adenin{(0, 0)}{270}, \thymin{(0, 0)}{270}, \guanin{(0, 0)}{270}, or \cytosin{(0, 0)}{270}, depending on whether the argument is 1, 2, 3, or 4. (One can also write a command that takes the name of the protein, or A, B and so on.) And then there is a list which indicates which protein should be at position 1, 2, etc.

\documentclass[margin = 12mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}

\begin{document}\begin{tikzpicture}
  \newcommand*{\adenin}[2]{\begin{scope}[shift = {#1}, rotate = #2, fill = red]%
        \fill(0, -.1) -- (.35, -.1) -- (.45, 0) -- (.35, .1) -- (0, .1) -- cycle;%
  \end{scope}}%
  \newcommand*{\thymin}[2]{\begin{scope}[shift = {#1}, rotate = #2, fill = blue]%
        \fill(0, -.1) -- (.35, -.1) -- (.25, 0) -- (.35, .1) -- (0, .1) -- cycle;
  \end{scope}}%
  \newcommand*{\guanin}[2]{\begin{scope}[shift = {#1}, rotate = #2, fill = green]%
        \fill(0, -.1) -- (.35, -.1) arc(-90:90:.1) -- (.35, .1) -- (0, .1) -- cycle;% -- (0, .1) -- cycle;%
  \end{scope}}%
  \newcommand*{\cytosin}[2]{\begin{scope}[shift = {#1}, rotate = #2, fill = yellow]%
        \fill(0, -.1) -- (.35, -.1) arc(270:90:.1) -- (.35, .1) -- (0, .1) -- cycle;%
  \end{scope}}%
  \newcommand*{\somein}[1]{\ifcase#1
  \or 
  \adenin{(0, 0)}{270}
  \or
  \thymin{(0, 0)}{270}
  \or
  \guanin{(0, 0)}{270}
  \or
  \cytosin{(0, 0)}{270}
  \fi
  } 
  \newcommand\myinlst{3, 1, 2, 2, 2, 2, 1, 3, 1, 4, 2, 2, 1, 1, 3, 4, 1, 
 2, 4, 4, 4, 4, 4, 4, 2, 2, 3, 1, 3, 4, 1, 4, 1, 4, 
 2, 3, 2, 4, 3, 4, 2, 3, 3, 2, 2, 3, 2, 1, 3, 1, 2, 
 3, 4, 3, 2, 4, 1, 2, 4, 4, 3, 3, 1, 1, 1, 4, 3, 4, 
 2, 2, 1, 2, 2, 2, 2, 2, 1, 4, 4, 1, 3, 4, 1, 1, 1, 
 3, 1, 2, 3, 3, 4, 2, 4, 3, 3, 3, 4, 2, 3, 2}
  \draw[double distance = 1pt, line cap = rect, decoration = {
        markings, 
        mark=between positions 5pt and 0.99 step 10pt
         with
        {\pgfmathtruncatemacro{\myin}{{\myinlst}[\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}-1]}
         \somein{\myin}},
        % 200 more lines with at position ...
     }, preaction = {decorate}, shorten <= -3pt]
        (-.5, -1.2) .. controls (2, 1) and (4, -1) .. (6, 0)
        .. controls (9, 1.5) and (10, 0) .. (12, 0);
        % the other three paths with each 200 lines with at position...
\end{tikzpicture}
\end{document}

enter image description here


Thanks to AndréC's comment, I solved the problem using lists:

\begin{document}\begin{tikzpicture}[
        adenin/.style = {decoration = {markings,
        mark = at position #1 with { \adenin{(0, 0)}{270} }
  }}, thymin/.style = {decoration = {markings,
        mark = at position #1 with { \thymin{(0, 0)}{270} }
  }}, guanin/.style = {decoration = {markings,
        mark = at position #1 with { \guanin{(0, 0)}{270} }
  }}, cytosin/.style = {decoration = {markings,
        mark = at position #1 with { \cytosin{(0, 0)}{270} }
  }}]

for each nucleotide, and then called them:

     \draw[double distance = 1pt, line cap = rect,
        thymin/.list = {5pt, 15pt, 35pt},
        adenin/.list = {25pt, 45pt, 55pt},
        guanin/.list = {75pt, 85pt, 115pt},
        cytosin/.list = {65pt, 95pt, 105pt},
      preaction = {decorate}, shorten <= -3pt]
        (-.5, -1.2) .. controls (2, 1) and (4, -1) .. (6, 0)

However this violates the principle that markings have to be placed along the path:

In [the] case [of using multiple marks], however, it is necessary that the positions on the path are in increasing order. (p 384 of the pgf manual).

Because of this, the markings are placed very weirdly: weirdly placed markings