上下文

上下文
  • 上下文
  • 问题
  • 问题

上下文

我知道可以使用 在彩色框中显示文本\colorbox。由于字符大小不同,因此框的高度也不同。

\documentclass{standalone}

\usepackage{fontspec}
\usepackage{color}
\pagecolor{blue}

\begin{document}
\colorbox{red}{This}\colorbox{green}{is}\colorbox{red}{a}\colorbox{green}{sentence}\colorbox{red}{.}
\end{document}

在此处输入图片描述

我还知道可以使用 使所有盒子具有相同的高度\strut

\documentclass{standalone}

\usepackage{fontspec}
\usepackage{color}

\begin{document}
\colorbox{red}{\strut This}\colorbox{green}{\strut is}\colorbox{red}{\strut a}\colorbox{green}{\strut sentence}\colorbox{red}{\strut .}
\end{document}

在此处输入图片描述

我现在已经为中文字符安装了等宽字体。如果我使用\colorbox,所有字符都会显示在其相应彩色框的垂直中心。

\documentclass{standalone}

\usepackage{fontspec}
\usepackage{color}
\pagecolor{blue}

\begin{document}
\fontspec[Path = \string~/.fonts/]{NotoSansMonoCJKsc-Regular}
\colorbox{red}{你}\colorbox{green}{好}\colorbox{red}{国}\colorbox{green}{工}
\end{document}

在此处输入图片描述

问题

我希望所有框都具有相同的高度。因此,我使用\strut

\documentclass{standalone}

\usepackage{fontspec}
\usepackage{color}

\begin{document}
\fontspec[Path = \string~/.fonts/]{NotoSansMonoCJKsc-Regular}
\colorbox{red}{\strut 你}\colorbox{green}{\strut 好}\colorbox{red}{\strut 国}\colorbox{green}{\strut 工}
\end{document}

在此处输入图片描述

问题是,现在所有字符都没有显示在相应颜色框的垂直中心。以下两个屏幕截图是通过 Inkscape 获得的最后两个字符的测量值。在第一个屏幕截图中,字符与顶部边框之间的间距为1.21 毫米,而字符与底边框之间的间距为2.04 毫米在第二张截图中,角色与顶部边框之间的间距为1.45 毫米底部边框是2.31 毫米

在此处输入图片描述

在此处输入图片描述

问题

给定一个包含汉字的句子,并使用 着色\colorbox,如何使得所有彩色框具有相同的高度,并使字符在相应的彩色框中垂直对齐。

答案1

在此处输入图片描述

颜色框总是\fboxsep在四边使用相等的空间()。

  1. 拉丁字符的高度和深度不同

  2. 支柱添加了比所有拉丁字符更高更深的不可见内容,因此所有框都强制相等

  3. 如果你使用宽度不为 0pt 的支柱,那么就更容易看到了,这样你就能看到它

  4. 如果你只是想要更大的间距,你不需要中文的支柱,只需增加\fboxsep

  5. 如果你想保持水平空间但增加垂直空间,请使用更适合中文的(可见)支柱,比字符高 5pt,深度为 5pt

  6. 和隐形支柱一样

\documentclass{article}

\usepackage{fontspec}
\usepackage{color}

\newcommand\xstrut{\rule[-.3\baselineskip]{2pt}{\baselineskip}}

\newcommand\xcstrut{\sbox0{你}\rule[-5pt]{2pt}{\dimexpr\ht0+10pt}}
\newcommand\cstrut{\sbox0{你}\rule[-5pt]{0pt}{\dimexpr\ht0+10pt}}


\begin{document}

1

\colorbox{red}{A}\colorbox{green}{x}\colorbox{red}{y}


{\fontspec{NotoSansMonoCJKsc-Regular}
\colorbox{red}{你}\colorbox{green}{好}\colorbox{red}{国}\colorbox{green}{工}}


2

\colorbox{red}{\strut A}\colorbox{green}{\strut x}\colorbox{red}{\strut y}


{\fontspec{NotoSansMonoCJKsc-Regular}
\colorbox{red}{\strut 你}\colorbox{green}{\strut 好}\colorbox{red}{\strut 国}\colorbox{green}{\strut 工}}

3

\colorbox{red}{\xstrut A}\colorbox{green}{\xstrut x}\colorbox{red}{\xstrut y}

{\fontspec{NotoSansMonoCJKsc-Regular}
\colorbox{red}{\xstrut 你}\colorbox{green}{\xstrut 好}\colorbox{red}{\xstrut 国}\colorbox{green}{\xstrut 工}}

{

4
\setlength\fboxsep{5pt}

\colorbox{red}{\strut A}\colorbox{green}{\strut x}\colorbox{red}{\strut y}


{\fontspec{NotoSansMonoCJKsc-Regular}
\colorbox{red}{你}\colorbox{green}{好}\colorbox{red}{国}\colorbox{green}{工}}
}


{
5

\colorbox{red}{\xstrut A}\colorbox{green}{\xstrut x}\colorbox{red}{\xstrut y}

{\fontspec{NotoSansMonoCJKsc-Regular}
\colorbox{red}{\xcstrut 你}\colorbox{green}{\xcstrut 好}\colorbox{red}{\xcstrut 国}\colorbox{green}{\xcstrut 工}}
}

{
6

\colorbox{red}{\strut A}\colorbox{green}{\strut x}\colorbox{red}{\strut y}

{\fontspec{NotoSansMonoCJKsc-Regular}
\colorbox{red}{\cstrut 你}\colorbox{green}{\cstrut 好}\colorbox{red}{\cstrut 国}\colorbox{green}{\cstrut 工}}
}
\end{document}

如果使用全大写字母,拉丁文中也会有类似的问题。如上所示,strut 最适合;它是和 的x折衷方案。因此,如果在大多数字体中除了 Q 之外没有降部,那么使用高度更大、深度更小的修改过的 strut 看起来通常最好,就像中文一样。Ay

在上述 1. 和 4. 中,中文没有使用支撑,我本以为所有框的高度都相同,但显然并非如此,而且更小。因此对于此字体,4.(仅使用 fboxsep)实际上不起作用,您需要 6.(当然您也可以增加)\fboxsep

答案2

字符的高度和深度并不相同。

我建议用一个具有最大高度和深度的作为样本。

\documentclass{article}

\usepackage{fontspec}
\usepackage{xcolor}

\newfontface{\zhtt}{NotoSansMonoCJKsc-Regular.otf}

\NewDocumentCommand{\zhttbox}{mm}{% #1 = color, #2 = character
  \begingroup
  \setlength{\fboxsep}{1pt}%
  \colorbox{#1}{\zhtt\vphantom{你}\smash{#2}}%
  \endgroup
}

\begin{document}

\zhttbox{red!70}{你}\zhttbox{green!70}{好}\zhttbox{red!70}{国}\zhttbox{green!70}{工}

\end{document}

在此处输入图片描述

gray!60由于色彩渲染的瑕疵,图片中的方框实际上并没有对齐。如果我将它们全部使用,则图像如下:

在此处输入图片描述

还添加基线

在此处输入图片描述

相关内容