Latex - 对字符串中的每个字符应用操作

hro*_*est 4 latex

我正在使用LaTeX,我遇到了有关字符串操作的问题.我希望将一个操作应用于字符串的每个字符,特别是我想用"\ discretionary {} {} {} x"替换每个字符"x".我想这样做是因为我有一个长串(DNA),我希望能够在任何点上分离而不用连字符.

因此,我希望有一个名为"myDNA"的命令可以为我执行此操作,而不是在每个字符后手动插入\ discretionary {} {} {}.

这可能吗?我浏览了网页,并且关于这个主题没有太多有用的信息(至少不是我能理解的),我希望你能提供帮助.

--edit澄清:我想在完成的文档中看到的是这样的:


    the dna sequence is CTAAAGAAAACAGGACGATTAGATGAGCTTGAGAAAGCCATCACCACTCA
    AATACTAAATGTGTTACCATACCAAGCACTTGCTCTGAAATTTGGGGACTGAGTACACCAAATACGATAG
    ATCAGTGGGATACAACAGGCCTTTACAGCTTCTCTGAACAAACCAGGTCTCTTGATGGTCGTCTCCAGGT
    ATCCCATCGAAAAGGATTGCCACATGTTATATATTGCCGATTATGGCGCTGGCCTGATCTTCACAGTCAT
    CATGAACTCAAGGCAATTGAAAACTGCGAATATGCTTTTAATCTTAAAAAGGATGAAGTATGTGTAAACC
    CTTACCACTATCAGAGAGTTGAGACACCAGTTTTGCCTCCAGTATTAGTGCCCCGACACACCGAGATCCT
    AACAGAACTTCCGCCTCTGGATGACTATACTCACTCCATTCCAGAAAACACTAACTTCCCAGCAGGAATT

只是简单的换行,没有任何连字符.DNA序列将是一个没有任何空格或任何东西的长串,但它可以在任何点断裂.这就是为什么我的想法是在每个字符之后使用"\ discretionary {} {} {}",以便它可以在任何时候断开而不插入任何连字符.

Deb*_*ski 6

这会将字符串作为参数并\discretionary{}{}{}在每个字符后调用.输入字符串在第一个美元符号处停止,因此您不应该使用它.

\def\hyphenateWholeString #1{\xHyphenate#1$\wholeString}

\def\xHyphenate#1#2\wholeString {\if#1$%
\else\say{#1}\discretionary{}{}{}%
\takeTheRest#2\ofTheString
\fi}

\def\takeTheRest#1\ofTheString\fi
{\fi \xHyphenate#1\wholeString}

\def\say#1{#1}
Run Code Online (Sandbox Code Playgroud)

你会把它称为\ hyphenateWholeString {CTAAAGAAAACAGGACG}.

而不是\ discretionary {} {} {}你可以尝试\ hspace {0pt},如果你更喜欢(并且在乳胶环境中).为了调整正确的边距,我认为你需要做一些更精细的调整(但见下文).当然,通过使用固定宽度的字体可以最小化效果.

修订:

\def\hyphenateWholeString #1{\xHyphenate#1$\wholeString\unskip}

\def\xHyphenate#1#2\wholeString {\if#1$%
\else\transform{#1}%
\takeTheRest#2\ofTheString\fi}

\def\takeTheRest#1\ofTheString\fi
{\fi \xHyphenate#1\wholeString}

\def\transform#1{#1\hskip 0pt plus 1pt}
Run Code Online (Sandbox Code Playgroud)

史蒂夫建议使用\hskip声音对我来说是个好主意,所以我做了一些修改.请注意,我已经重命名了\say宏并使其更有用,因为它现在实际上进行了转换.(但是,如果删除\hskipfrom \transform,则还需要删除\unskip主宏定义中的内容.


编辑:

还有seqsplit包装,似乎是用于打印DNA数据或长数字.它们还带来了一些更好的输出选项,所以也许这就是你要找的......