如何在 n 个字符后拆分长单词(长基因组序列)

如何在 n 个字符后拆分长单词(长基因组序列)

我需要在 Latex 文档中包含相对较小的基因组序列(尽管如此,它们仍然是约 600-900 个 A、T、G 和 C 的单词),但我找不到办法在达到一定数量的字符后强制换行

我看到了大量关于此事的类似主题,其中大多数引用了清单和可自由支配的内容,但所有建议的解决方案都依赖于长单词的小尺寸来手动添加“不可见的断点”,或者依赖于在单词内,一些特殊字符(点,下划线)或模式可以被定义为可破坏区域。

不幸的是,我处理的序列太长,无法手动编辑,并且没有可以在自由裁量范围内使用的特殊模式,如果我想坚持每行 50 个碱基的标准,那么这些解决方案都无济于事。

我真的没有什么主意,所以如果您有任何线索,请分享!

下面是我需要包含的序列示例:

CTCCTTGGGCTGTTATTCCGTAAAAGTATTTGTGGAAGATACGGCTGTCATACATGATATGTTTTTTGTTTATAACAATAGTTCTTTCTTTGATTTCACCATAGGTTGCCTCAAATTGCTCTTTTGTTGCTTGTCCAGCTGTTAAGACTAAATGTTTTGACCCCTCATTTATAAGACCGATTGCGTTGAATGGTAAGACATTCTGTTGTGCTGATTGTAATTCTGAATAGCTACGGATTTTTATGAAGATATAGTTTTTTAATATTGGTATTTCATTCCAGACATACTTCTGTATAAAGGATTTATTAAACGGTGTTGTTTTGATTGCTCTATAATACTTATCTTGTTGTCCTCTTAATTTTACCCAAGGTCTTTCAAACTCTTGGGAGTTAATGATTATAAGCATATTGTAAAGCTGTCCAGCTAATCCGAAGAATACTGGAAGCCAGTGGGTAAAGCTTGTCTGTTTTGGTAAAGCTGTTTGAACGTCTGACAAGAACAAGTCCAGACCTTCATATTTGTGGATTTTTTGAAACTTCATATTTTGATATGAACCGTCTACAATATCACTATATTTTACTGGTTGCCCAGTTTTTTGATTAATGTATCCAGGTCTTTAATATCTACTACTAAAACCACCGTAACCATAGTCCACGTTAGAGATATAGAGAGGTTTCGCATAAATGTGAACCCAGATTGCTTGTTGTTGTCTTTCATAACTCATTTGAAGACCAGTTTTAATGCGTTCTTTAATTGCTTGATACGTT

答案1

seqsplit包裹将通过添加合适的断点来分解此类表达式。它专为此类 DNA 序列而设计,并以复杂的方式处理各种形式的输入。但是,您希望在特定数量的字符后分解您的材料。这可以通过提供的命令来实现xstring包裹通过其拆分命令\StrSplit

示例输出

\documentclass{article}

\usepackage{xstring,etoolbox}

\newcommand{\fixsplit}[2]{\StrLen{#2}[\mynum]\ifnumcomp{\mynum}{<}{\numexpr(#1)+1\relax}%
  {#2}%
  {\StrSplit{#2}{#1}{\myfirststr}{\mysecondstr}\myfirststr\linebreak
  \fixsplit{#1}{\mysecondstr}}}

\begin{document}


\begin{quote}
  \ttfamily
  \fixsplit{30}{CTCCTTGGGCTGTTATTCCGTAAAAGTATTTGTGGAAGATACGGCTGTCATACATGATATGTTTTTTGTTTATAACAATAGTTCTTTCTTTGATTTCACCATAGGTTGCCTCAAATTGCTCTTTTGTTGCTTGTCCAGCTGTTAAGACTAAATGTTTTGACCCCTCATTTATAAGACCGATTGCGTTGAATGGTAAGACATTCTGTTGTGCTGATTGTAATTCTGAATAGCTACGGATTTTTATGAAGATATAGTTTTTTAATATTGGTATTTCATTCCAGACATACTTCTGTATAAAGGATTTATTAAACGGTGTTGTTTTGATTGCTCTATAATACTTATCTTGTTGTCCTCTTAATTTTACCCAAGGTCTTTCAAACTCTTGGGAGTTAATGATTATAAGCATATTGTAAAGCTGTCCAGCTAATCCGAAGAATACTGGAAGCCAGTGGGTAAAGCTTGTCTGTTTTGGTAAAGCTGTTTGAACGTCTGACAAGAACAAGTCCAGACCTTCATATTTGTGGATTTTTTGAAACTTCATATTTTGATATGAACCGTCTACAATATCACTATATTTTACTGGTTGCCCAGTTTTTTGATTAATGTATCCAGGTCTTTAATATCTACTACTAAAACCACCGTAACCATAGTCCACGTTAGAGATATAGAGAGGTTTCGCATAAATGTGAACCCAGATTGCTTGTTGTTGTCTTTCATAACTCATTTGAAGACCAGTTTTAATGCGTTCTTTAATTGCTTGATACGTT}
\end{quote}

\end{document}

请注意,我选择使用固定宽度字体打印结果,否则您将得到相当奇怪的效果。还请注意,这种方式的xstring工作方式是,操作结果通常必须存储在宏中,而不是直接使用。

答案2

你可以尝试一下这个吗:

\documentclass{article}
\begin{document}
\parindent=0pt
\ttfamily

\makeatletter
\def\xfoo#1#2{\@tempcnta=0%
  \@tfor\xx:=#2\do{\advance\@tempcnta 1%
    \xx\ifnum\the\@tempcnta=#1\newline\@tempcnta=0\fi%
  }%
}

\xfoo{10}{CTCCTTGGGCTGTTATTCCGTAAAAGTATTTGTGGAAGATACGGCTGTCATACATGATATGTTTTTTGTTTATAACAATAGTTCTTTCTTTGATTTCACCATAGGTTGCCTCAAATTGCTCTTTTGTTGCTTGTCCAGCTGTTAAGACTAAATGTTTTGACCCCTCATTTATAAGACCGATTGCGTTGAATGGTAAGACATTCTGTTGTGCTGATTGTAATTCTGAATAGCTACGGATTTTTATGAAGATATAGTTTTTTAATATTGGTATTTCATTCCAGACATACTTCTGTATAAAGGATTTATTAAACGGTGTTGTTTTGATTGCTCTATAATACTTATCTTGTTGTCCTCTTAATTTTACCCAAGGTCTTTCAAACTCTTGGGAGTTAATGATTATAAGCATATTGTAAAGCTGTCCAGCTAATCCGAAGAATACTGGAAGCCAGTGGGTAAAGCTTGTCTGTTTTGGTAAAGCTGTTTGAACGTCTGACAAGAACAAGTCCAGACCTTCATATTTGTGGATTTTTTGAAACTTCATATTTTGATATGAACCGTCTACAATATCACTATATTTTACTGGTTGCCCAGTTTTTTGATTAATGTATCCAGGTCTTTAATATCTACTACTAAAACCACCGTAACCATAGTCCACGTTAGAGATATAGAGAGGTTTCGCATAAATGTGAACCCAGATTGCTTGTTGTTGTCTTTCATAACTCATTTGAAGACCAGTTTTAATGCGTTCTTTAATTGCTTGATACGTT}
\end{document}

答案3

如果您可以change and replace使用编辑器选择文本,则在长字符串中用、 by 、CbyC\brk{}Gby替换。如果您不想让文本消失在视野之外,请在换行符处使用G\brk{}AA\brk{}TT\brk{}%

\documentclass{article}

\newcommand*{\brk}{\discretionary{}{}{}\hfil}
\begin{document}

\noindent C\brk{}T\brk{}C\brk{}C\brk{}T\brk{}T\brk{}G\brk{}G\brk{}G\brk{}C\brk{}T\brk{}G\brk{}T\brk{}T\brk{}A\brk{}T\brk{}T\brk{}C\brk{}C\brk{}G\brk{}T\brk{}A\brk{}A\brk{}A\brk{}A\brk{}G\brk{}T\brk{}A\brk{}T\brk{}T\brk{}T\brk{}G\brk{}T\brk{}G\brk{}G\brk{}A\brk{}A\brk{}G\brk{}A\brk{}T\brk{}A\brk{}C\brk{}G\brk{}G\brk{}C\brk{}T\brk{}G\brk{}T\brk{}C\brk{}A\brk{}T\brk{}A\brk{}C\brk{}A\brk{}T\brk{}G\brk{}A\brk{}T\brk{}A\brk{}T\brk{}G\brk{}T\brk{}T\brk{}T\brk{}T\brk{}T\brk{}T\brk{}G\brk{}T\brk{}T\brk{}T\brk{}A\brk{}T\brk{}A\brk{}A\brk{}C\brk{}A\brk{}A\brk{}T\brk{}A\brk{}G\brk{}T\brk{}T\brk{}C\brk{}T\brk{}T\brk{}T\brk{}C\brk{}T\brk{}T\brk{}T\brk{}G\brk{}A\brk{}T\brk{}
\hfill\mbox{}

\medskip

\noindent 
C\brk{}T\brk{}C\brk{}C\brk{}T\brk{}T\brk{}G\brk{}G\brk{}G\brk{}C\brk{}%
T\brk{}G\brk{}T\brk{}T\brk{}A\brk{}T\brk{}T\brk{}C\brk{}C\brk{}G\brk{}%
T\brk{}A\brk{}A\brk{}A\brk{}A\brk{}G\brk{}T\brk{}A\brk{}T\brk{}T\brk{}%
T\brk{}G\brk{}T\brk{}G\brk{}G\brk{}A\brk{}A\brk{}G\brk{}A\brk{}T\brk{}%
A\brk{}C\brk{}G\brk{}G\brk{}C\brk{}T\brk{}G\brk{}T\brk{}C\brk{}A\brk{}%
T\brk{}A\brk{}C\brk{}A\brk{}T\brk{}G\brk{}A\brk{}T\brk{}A\brk{}T\brk{}%
G\brk{}T\brk{}T\brk{}T\brk{}T\brk{}T\brk{}T\brk{}G\brk{}T\brk{}T\brk{}%
T\brk{}A\brk{}T\brk{}A\brk{}A\brk{}C\brk{}A\brk{}A\brk{}T\brk{}A\brk{}%
G\brk{}T\brk{}T\brk{}C\brk{}T\brk{}T\brk{}T\brk{}C\brk{}T\brk{}T\brk{}%
T\brk{}G\brk{}A\brk{}T\brk{}
\hfill\mbox{}

\end{document}

相关内容