我需要打印非常长的 DNA 序列,为此我使用了 dnaseq 包。有没有办法将 DNA 序列的某些部分格式化为粗体?该包允许使用 '{} 来更改碱基背景的颜色,但我找不到更改格式的方法。使用 \textbf{} 不起作用。
\usepackage[utf8]{inputenc}
\usepackage{dnaseq}
\begin{document}
% in this example I would like TAATACGACTCACTATAGGG to be bold and without
% background, rather than having a SpringGreen background
\DNA! '{SpringGreen} TAATACGACTCACTATAGGG '{white} AACGCTAGTCATGCATCGTATGTAA
CGCTAGTCATGCATCGTATGTAACGCTAGTCATGCATCGTATGTAACGCTAGTCATGCATCGTATGTAACGCTAGT
CATGCATCGTATGTAACGCTAGTCATGCATCGTATGTAACGCTAGTCATGCATCGTATGTAACGCTAGTCATG !
\end{document}
关于如何实现这一点有什么想法吗?
答案1
有许多问题需要克服。首先,默认的 Computer Modern 字体不支持粗体\ttfamily
,因此您需要不同的字体。然后,您会遇到中等系列字体的固定宽度与粗体系列的固定宽度不同的情况(至少在 中是这种情况lmodern
),因此您的对齐会搞砸。
然后,您必须找出包中设置颜色的位置,我发现是宏\@DNA
。最后,您必须调整宏以适应。我所做的是使用一个新的宏\boxwidth
来指定设置每个字符的框的宽度,这将克服粗体字体与中型系列字体宽度不同的问题。我还调整了说明符的含义'{...}
以执行您想要的操作。
在 MWE 中,我演示了粗体、青色框、斜体、红色和\scriptsize\rmfamily
。
\documentclass[addpoints, a4paper, 12pt]{exam}
\usepackage[utf8]{inputenc}
\usepackage{dnaseq}
\usepackage{newtxtext}
\makeatletter
\def\@DNA#1{%
%% insert a space after \DNAblock bases
\ifnum\count@=\DNAblock\count@=0\ %
\advance\@tempcnta by 1\fi
\def\@DNA@cmp{#1}%
%% check for end of sequence or color shift
\ifx\@DNA@cmp\@DNA@end
\let\next\egroup
\else
\ifx\@DNA@cmp\@DNA@color
\let\next\@DNA@setcolor
\else
\advance\count@ by 1
\advance\@tempcntb by 1
%% line break after calculated number of blocks
\ifnum\@tempcnta=\blocks \\
\hskip\z@\phantom{\DNAreserve}\llap {\the\@tempcntb}\ %
\@tempcnta=0
\fi
\makebox[\boxwidth]{\struty\@DNA@thecolor{#1}}%
\penalty0\let\next\@DNA
\fi
\fi
\next
}
\makeatother
\newcommand\boxwidth{1.1ex}
\begin{document}
\DNA!
'{\textbf} TAATACGACTCACTATAGGG
'{\colorbox{cyan}} AACGCTAGTC
'{} ATGCATCGTATGTAACGCTA GTCATGCATC
'{\textit} GTATGTAACG
'{\textcolor{red}} CTAGTCATGC
'{\scriptsize\rmfamily} ATCGTATGTA
'{} ACGCTAGTCATGCATCGTATGTAACGCTAGT
CATGCATCGTATGTAACGCTAGTCATGCATCGTATGTAACG
CTAGTCATGCATCGTATGTAACGCTAGTCATG
!
\end{document}