图像垂直居中,文本居中

图像垂直居中,文本居中

我想使用 将图像的中心与文本的垂直中心垂直对齐在同一行\raisebox。必须使用宏,因为它将被多次使用(并且在同一行上多次使用)。此实现有效,但需要使用临时长度。我想直接进行计算,而无需这些,但找不到正确的语法。不起作用\raisebox{0.5\heightof{E}-0.25in}

最接近的问题似乎是这里,但这种方法无法正确对齐。我希望垂直图像中心与文本基线和字母顶部之间的中点对齐(在本例中为“E”)。

梅威瑟:

\documentclass{article}
\usepackage{calc}
\begin{document}

\newlength{\lenA}
\newlength{\lenB}
\setlength{\lenA}{\heightof{E}}
\setlength{\lenB}{0.25in}
Text \raisebox{0.5\lenA-0.5\lenB}{\rule{0.25in}{0.25in}} Testing

\end{document}

答案1

三种方法:

  1. tabular

    \begin{tabular}{@{}c@{}}<material>\end{tabular}
    
  2. 使用\raisebox并测量大写字母

    \raisebox{.5\fontcharht\font`E-.5\height}{<material>}
    
  3. 使用\raisebox and1ex`(这是 David 的解决方案)

    \raisebox{1ex-0.5\height}{<material>}
    
\documentclass{article}
\usepackage{calc}
\begin{document}

T \begin{tabular}{@{}c@{}}\rule{0.25in}{0.25in}\end{tabular} T
\raisebox{.5\fontcharht\font`E-.5\height}{\rule{0.25in}{0.25in}} T
\raisebox{1ex-0.5\height}{\rule{0.25in}{0.25in}} T

\end{document}

在此处输入图片描述

我会使用第一种方法,但这取决于实际应用。第一种方法的中心化是相对于数学轴的,分数线将在此绘制。

答案2

下面比较几个“中点”:

  1. 1ex(单位名称来自小写字母 x),参见 大卫的回答

  2. 信件的中间E(方法来自问题)。

  3. 数学轴,减号、等号、加号等的中心轴。这也是egreg 的tabular解决方案

  4. 支撑箱的比例。LaTeX 将 30% 置于基线\baselineskip以下,将 70% 置于基线以上。

以下示例文件定义了宏并\midraiseboxA对其\midraiseboxB进行了比较:

\documentclass{article}
\usepackage{calc}

\newcommand*{\midraiseboxA}{%
  \raisebox{1ex-.5\height}%
}
\newcommand*{\midraiseboxB}{%
  \raisebox{(\heightof{E}-\height)/2}%
}
\newcommand*{\midraiseboxC}{%
  \raisebox{\heightof{$\vcenter{}$}-.5\height}%
}
\newcommand*{\midraiseboxD}{%
  \raisebox{.2\baselineskip-.5\height}%
}

\usepackage{color}
\newcommand*{\testI}{%
  \textcolor{red}{\rule{.5ex}{.25pt}}%
}
\newcommand*{\testII}{%
  \rule{\baselineskip}{\baselineskip}%
}

\setlength{\parskip}{2ex}

\begin{document}

\newcommand*{\test}[1]{%
  E#1{\testI}xe#1{\testI}- Test #1{\testII} Testing %
  \kern-.75\baselineskip
  \textcolor[gray]{.5}{%
    \rlap{\raisebox{-.5\height}%
                   {\rule{3\baselineskip}{.2pt}}}%
    \rlap{\raisebox{\heightof{E}-.5\height}%
                   {\rule{3\baselineskip}{.2pt}}}%
    \rlap{\raisebox{\depthof{g}*(-1)-.5\height}%
                   {\rule{3\baselineskip}{.2pt}}}%
  }%
  \kern.75\baselineskip
  #1{\testII} Eg%
  \par
}

\test\midraiseboxA
\test\midraiseboxB
\test\midraiseboxC
\test\midraiseboxD

\end{document}

结果

评论:

calc如果需要,可以删除对包的依赖:

  • 表达式使用和\heightof计算\settoheight
  • 可以使用 e-TeX 进行计算\dimexpr

例如\midraiseboxC

\newdimen\midraisedimen
\newcommand*{\midraiseboxC}{%
  \settoheight\midraisedimen{$\vcenter{}$}%
  \raisebox{\dimexpr\midraisedimen-.5\height\relax}%
}

答案3

使用字体的 x 高度更容易(尽管你可以根据需要测量 E)

在此处输入图片描述

\documentclass{article}
\usepackage{calc}
\begin{document}


Text \raisebox{1ex-0.5\height}{\rule{0.25in}{0.25in}} Testing

\end{document}

相关内容