如何对齐可绘制的文本?

如何对齐可绘制的文本?

我想取两行列对齐文本(双链 DNA 数据),并在部分文本周围添加一些方框和附加标签。我通常使用 tikz 来制作这种图形,但我很难在 tikz 中保留列对齐文本。

      ATTGGNAGCAGAACCCCATGCGCTGGCGCGGCTACGACAGCTAACTTGAGA...
...AGATAACNNTCGTCTTGGGGTACGCGACCGCGCCGATGCTNTCGATTGAAC

我曾尝试在 tikz 节点中使用 Verbatim (fancyvrb) 和 verbatim 环境,但这会出现如下编译错误这个问题

\documentclass{beamer}

\usepackage{tikz}
\usepackage{fancyvrb}

\begin{document}

\begin{frame}[fragile]
\frametitle{Duplicates}
\begin{tikzpicture}
    \node[align=left]{
        \begin{Verbatim}
      ATTGGNAGCAGAACCCCATGCGCTGGCGCGGCTACGACAGCTAACTTGAGA...
...AGATAACNNTCGTCTTGGGGTACGCGACCGCGCCGATGCTNTCGATTGAAC
        \end{Verbatim}
    };
\end{tikzpicture}
\end{frame}

\end{document}

! LaTeX 错误:出现错误 - 可能缺少 \item。l.4
\begin{Verbatim}

上述问题被标记为问题的答案表明使用\Verb,这对于我的长字符串来说并不适合。

我也尝试在 tikz 节点内使用\texttt,但这无法正确对齐。

\node[align=left]{
\texttt{      ATTGGNAGCAGAACCCCATGCGCTGGCGCGGCTACGACAGCTAACTTGAGA...}\\
\texttt{...AGATAACNNTCGTCTTGGGGTACGCGACCGCGCCGATGCTNTCGATTGAAC}
};

我也考虑过使用 tikz 矩阵,但是每个字母一个节点似乎过于复杂。

有没有一种相对简单的方法来实现带有绘图功能的对齐文本?

答案1

我无法帮助您处理tikz覆盖,但tikz可以通过以下方式将内容逐字放入节点verbatimbox

\documentclass{beamer}
\usepackage{tikz}
\usepackage{verbatimbox}
\begin{document}
\begin{frame}[fragile]
\frametitle{Duplicates}
\begin{verbbox}[\small]
      ATTGGNAGCAGAACCCCATGCGCTGGCGCGGCTACGACAGCTAACTTGAGA...
...AGATAACNNTCGTCTTGGGGTACGCGACCGCGCCGATGCTNTCGATTGAAC
\end{verbbox}
\begin{tikzpicture}
    \node[align=left]{\theverbbox};
\end{tikzpicture}
\end{frame}
\end{document}

在此处输入图片描述

也许这是一种不太有效的方式来添加花哨的东西,但我知道是\stackinset

\documentclass{beamer}
\usepackage{tikz}
\usepackage{verbatimbox,stackengine,xcolor}
\begin{document}
\begin{frame}[fragile]
\frametitle{Duplicates}
\begin{verbbox}[\small]
      ATTGGNAGCAGAACCCCATGCGCTGGCGCGGCTACGACAGCTAACTTGAGA...
...AGATAACNNTCGTCTTGGGGTACGCGACCGCGCCGATGCTNTCGATTGAAC
\end{verbbox}
\stackinset{l}{100pt}{c}{}{\textcolor{red}{\framebox(68,22){}}}{\theverbbox}
\end{frame}
\end{document}

在此处输入图片描述

答案2

您还可以将文本放入 parbox 并使用 和包中的一个\seqsplit或命令:\DNAseqsplitdnaseq

\documentclass{beamer}

\usepackage{tikz}
\usepackage{fancyvrb}
\usepackage{dnaseq, seqsplit}

\begin{document}

\begin{frame}[fragile]
\frametitle{Duplicates}
\begin{tikzpicture}
 \node[align=left
 ]{\parbox{\linewidth}
 {\ttfamily\seqsplit{ATTGGNAGCAGAACCCCATGCGCTGGCGCGGCTACGACAGCTAACTTGAGA...
...AGATAACNNTCGTCTTGGGGTACGCGACCGCGCCGATGCTNTCGATTGAAC}

\DNA! ATTGGNAGCAGAACCCCATGCGCTGGCGCGGCTACGACAGCTAACTTGAGA...
...AGATAACNNTCGTCTTGGGGTACGCGACCGCGCCGATGCTNTCGATTGAAC! }
};
\end{tikzpicture}
\end{frame}

\end{document} 

在此处输入图片描述

相关内容