如何使用 LaTeX 进行序列比对

如何使用 LaTeX 进行序列比对

我需要写下序列比对(分子生物学)。在我看来,使用 LaTeX 几乎不可能实现这一点。由于我是 LaTeX 新手,有人能给我一些提示吗?我尝试尽可能好地复制我想要的内容。这就是我想在 pdf 文档中得到的内容。

AGCATT--ATATTCTAAATTT (Reference sequence)
  |||||||||||||x|||
  CATTAGATA--CTTAA    (Query sequence)

谢谢您的任何评论。

答案1

在此处输入图片描述

\documentclass{article}

\def\zz{\par\zzz}
\def\zzz#1{%
 \ifx!#1\hfill\else
 \makebox[.75em]{\ifx.#1\else\ifx|#1$|$\else#1\fi\fi}%
 \expandafter\zzz
 \fi}

\begin{document}


\zz AGCATT--ATATTCTAAATTT ! (Reference sequence)
\zz ..|||||||||||||x|||   !
\zz ..CATTAGATA--CTTAA    ! (Query sequence)


\end{document}

答案2

这是一个具有方便语法的实现,使用expl3

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}

\usepackage{xparse}

\providecommand{\textbar}{$|$}

\ExplSyntaxOn
\NewDocumentCommand{\sequence}{O{}m}
 {
  \group_begin:
  \keys_set:nn { egreg/sequence } { #1 }
  \egreg_sequence:n { #2 }
  \group_end:
 }
\NewDocumentCommand{\sequencesetup}{m}
 {
  \keys_set:nn { egreg/sequence } { #1 }
 }

\keys_define:nn { egreg/sequence }
 {
  top    .tl_set:N  = \l_egreg_sequence_top_tl,
  bottom .tl_set:N  = \l_egreg_sequence_bot_tl,
  width  .tl_set:N  = \l_egreg_sequence_wd_tl,
  sfont  .tl_set:N  = \l_egreg_sequence_sfont_tl,
  lfont  .tl_set:N  = \l_egreg_sequence_lfont_tl,
  top    .initial:n = {Reference~sequence},
  bottom .initial:n = {Query~sequence},
  width  .initial:n = 0.75em,
 }

\seq_new:N \l__egreg_sequence_rows_seq

\cs_new_protected:Nn \egreg_sequence:n
 {
  \seq_set_split:Nnn \l__egreg_sequence_rows_seq { \\ } { #1 }
  \begin{tabular}{@{}ll@{}}
  \tl_use:N \l_egreg_sequence_sfont_tl
  \tl_map_function:fN
   { \seq_item:Nn \l__egreg_sequence_rows_seq { 1 } }
   \egreg_sequence_item:n &
  \tl_use:N \l_egreg_sequence_lfont_tl
  (\l_egreg_sequence_top_tl) \\
  \tl_use:N \l_egreg_sequence_sfont_tl
  \tl_map_function:fN
   { \seq_item:Nn \l__egreg_sequence_rows_seq { 2 } }
   \egreg_sequence_item:n &
  \\
  \tl_use:N \l_egreg_sequence_sfont_tl
  \tl_map_function:fN
   { \seq_item:Nn \l__egreg_sequence_rows_seq { 3 } }
   \egreg_sequence_item:n &
  \tl_use:N \l_egreg_sequence_lfont_tl
  (\l_egreg_sequence_bot_tl) \\
  \end{tabular}
 }
\cs_generate_variant:Nn \tl_map_function:nN { f }

\cs_new_protected:Nn \egreg_sequence_item:n
 {
  \makebox[\l_egreg_sequence_wd_tl]
   {
    \token_if_eq_charcode:NNTF #1 |
     { \textbar }
     { \token_if_eq_charcode:NNF #1 . { #1 } }
   }
 }
\ExplSyntaxOff

\begin{document}

\section*{Standard}

\sequence{
  AGCATT--ATATTCTAAATTT \\
  ..|||||||||||||x||| \\
  ..CATTAGATA--CTTAA
}

\section*{With options}

\sequence[
  top=Séquence de référence,
  bottom=Séquence de requête,
  sfont=\ttfamily,
  width=0.5em,
]{
  AGCATT--ATATTCTAAATTT \\
  ..|||||||||||||x||| \\
  ..CATTAGATA--CTTAA
}

\section*{With setup}

\sequencesetup{
  top=Séquence de référence,
  bottom=Séquence de requête,
  sfont=\ttfamily,
  width=0.5em,
}

\sequence[lfont=\bfseries]{
  AGCATT--ATATTCTAAATTT \\
  ..|||||||||||||x||| \\
  ..CATTAGATA--CTTAA
}

\end{document}

输入在\\标记处被拆分,然后三行排版,每个字符位于一个框中(可自定义宽度)。末尾的标签添加到顶部和底部行(也可自定义)。序列(key sfont)的字体和标签(key lfont)是独立的。

在此处输入图片描述

答案3

verbatim 也许?

在此处输入图片描述

\documentclass{article}
\begin{document}
\begin{verbatim}
AGCATT--ATATTCTAAATTT (Reference sequence)
  |||||||||||||x|||
  CATTAGATA--CTTAA    (Query sequence)
\end{verbatim}
\end{document}

相关内容