我想添加双色文本。我就是这么做的
\newlength\myl
\newlength\myh
\newcommand{\bicolor}[1]{
\setlength{\myl}{0pt-\widthof{#1}}%
\setlength{\myh}{\heightof{#1}}%
\raisebox{0.5\myh}{\color{red}\clipbox{0pt {0.5\myh} 0pt 0pt}{\mbox{#1}}}%
\hspace{\myl}%
{\color{blue}\clipbox{0pt 0pt 0pt {0.5\myh}}{\mbox{#1}}}%
}
和\bicolor{BiKolor stuff}
有点作品......(最后切了一些问题)
然而,这并不管用\bicolor{BiKolor$_2$}
有什么更好的方法可以进行?
答案1
正如已经指出的那样这个答案,问题在于没有考虑深度。这个答案也解决了这个问题,但与 Steven 的方法略有不同:分界线的高度不取决于深度。我不知道这是否是一件好事。另一个区别是避免了虚假空间(但这并不是真正必要的)。
\documentclass{article}
\usepackage{trimclip}
\usepackage{xcolor}
\newlength\myl
\newlength\myh
\newcommand{\bicolor}[1]{%
\setbox0\hbox{#1}%
\makebox[\wd0][c]{\raisebox{\dimexpr0.5\ht0-0.5\dp0}{\textcolor{red}{\clipbox{-1pt {\dimexpr0.5\ht0+0.5\dp0} -1pt -1pt}{\copy0}}}%
\hspace{\dimexpr-\wd0-2pt}%
{\textcolor{blue}{\clipbox{-1pt -1pt -1pt {0.5\ht0}}{\copy0}}}}%
}
\begin{document}
B\bicolor{BiKolor$_2$}B\bicolor{BiKolor stuff}\par
B{BiKolor$_2$}B{BiKolor stuff}
\end{document}
答案2
您需要考虑基线以下文本的深度。
\documentclass{article}
\usepackage{xcolor,calc,trimclip}
\begin{document}
\newlength\myl
\newlength\myh
\newlength\myd
\newcommand{\bicolor}[1]{
\setlength{\myl}{0pt-\widthof{#1}}%
\setlength{\myh}{\heightof{#1}}%
\setlength{\myd}{\depthof{#1}}%
\raisebox{0.5\myh}{\color{red}\clipbox{0pt {0.5\myh+\myd} 0pt 0pt}{\mbox{#1}}}%
\hspace{\myl}%
{\color{blue}\clipbox{0pt 0pt 0pt {0.5\myh}}{\mbox{#1}}}%
}
\bicolor{BiKolor stuff}
\bicolor{BiKolor$_2$}
\end{document}
请注意,由于字体突出或“过冲”,您会因剪切而丢失一些“ff”字体字形(请参阅大写字母的局部高度是多少?)。如果需要,您可以将这些边界剪切到 -1pt 以进行补偿。
-1pt
但是,如果在左右边界上进行裁剪,结果会变宽 2pt,因此需要\hspace
在过程开始和结束时向左移动 1pt。在 MWE 中,我展示了使用和不使用双色来比较结果。
\documentclass{article}
\usepackage{xcolor,calc,trimclip}
\newlength\myl
\newlength\myh
\newlength\myd
\newcommand{\bicolor}[1]{\hspace{-1pt}%
\setlength{\myl}{0pt-\widthof{#1}}%
\setlength{\myh}{\heightof{#1}}%
\setlength{\myd}{\depthof{#1}}%
\raisebox{0.5\myh}{\color{red}\clipbox{-1pt {0.5\myh+\myd} -1pt -1pt}%
{\mbox{#1}}}%
\hspace{\myl-2pt}%
{\color{blue}\clipbox{-1pt -1pt -1pt {0.5\myh}}{\mbox{#1}}}%
\hspace{-1pt}}
\begin{document}
BiKolor stuff
\bicolor{BiKolor stuff}
\bicolor{BiKolor$_2$ Xg jRETY}
BiKolor$_2$ Xg jRETY
\end{document}