![在 \parbox 中使用 \color 会导致垂直位移](https://linux22.com/image/377654/%E5%9C%A8%20%5Cparbox%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20%5Ccolor%20%E4%BC%9A%E5%AF%BC%E8%87%B4%E5%9E%82%E7%9B%B4%E4%BD%8D%E7%A7%BB.png)
修改时我的答案到这个问题我遇到了一些奇怪的行为。如果\color{<color>}
在顶部对齐的开头使用\parbox
,则整个框会向下移动,如下所示:
\documentclass{article}
\usepackage{xcolor}
\begin{document}
Word
\framebox{\parbox[t]{1cm}{word}} %% <- this is fine
\framebox{\parbox[t]{1cm}{\textcolor{blue}{word}}} %% <- this is fine
\framebox{\parbox[t]{1cm}{\color{blue}word}} %% <- ??
\framebox{\parbox[t]{1cm}{\hskip0pt\color{blue}word}} %% <- this is fine
\framebox{\parbox[t]{1cm}{\leavevmode\color{blue}word}} %% <- this is fine
\framebox{\parbox[t]{1cm}{$\displaystyle\int$}} %% <- this is fine
\framebox{\parbox[t]{1cm}{\color{blue}$\displaystyle\int$}} %% <- ??
\end{document}
(\framebox
es 只是为了显示\parbox
es 的位置/大小。)
有人能告诉我为什么会发生这种情况吗(以及如何最好地避免这种情况)?
答案1
\color
通常通过“whatsits”实现,即\special
或\pdfcolorstack
对于 pdfTeX 的情况。它成为垂直框 ( ) 开头的顶部元素\parbox[t]
。下一段从下面开始。将其放在\leavevmode
起始段落的基线之后是正确的解决方法。
为了进行调试,可以通过以下方式检查盒子\showbox
:
\documentclass{article}
\usepackage{color}
\begin{document}
\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\tracingonline=1
\setbox0=\hbox{\parbox[t]{1cm}{\color{blue}word}}
\showbox0
\end{document}
控制台(带有\tracingonline=1
)和.log
文件报告:
\hbox(0.0+6.94444)x28.45274
.\vbox(0.0+6.94444)x28.45274
..\pdfcolorstack 0 push {0 0 1 rg 0 0 1 RG}
..\glue(\parskip) 0.0
..\hbox(6.94444+0.0)x28.45274, glue set 7.03604fil
...\hbox(0.0+0.0)x0.0
...\OT1/cmr/m/n/10 w
...\kern-0.27779
...\OT1/cmr/m/n/10 o
...\OT1/cmr/m/n/10 r
...\OT1/cmr/m/n/10 d
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\pdfcolorstack 0 pop
! OK.
l.8 \showbox0