为什么图片不能垂直对齐?

为什么图片不能垂直对齐?

我想垂直对齐单元格内容(任意内容)。但一开始 - 它不适用于图片。为什么?如何修复?

\documentclass{book}
\usepackage{graphicx}
\usepackage{array}

\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}

\begin{document}

\begin{tabular}{L{0.5\textwidth}l} 
\includegraphics[width=25pt, height=25pt]{pic1.png} &  
\includegraphics[width=150pt, height=150pt]{pic2.png}\end{tabular}

\end{document}

UPD:对于文本对齐我使用

\newcolumntype{R}[2]{>{ \raggedleft \arraybackslash \hspace{0pt}}{#2}{#1}}
\newcolumntype{L}[2]{>{\raggedright\arraybackslash}{#2}{#1}}
\newcolumntype{C}[2]{>{\center\arraybackslash}{#2}{#1}}

但当我把

\begin{tabular}{L{0.5\textwidth}{p}L{100mm}{m}}
bla-bla & \includegraphics[width=25pt, height=25pt, valign=c]{pic0.png}

它没有将第二列内容对齐到单元格的中间,有什么诀窍吗?

我需要一个通用规则来自动生成 tex

答案1

这不是一个答案。你已经有了答案。相反,这只是试图解释这些答案的基础。

这是一张图片:

基线对齐

蓝色虚线表示第一列的基线,即文本的基线。请注意,大部分文本超出此基线,但部分字符超出基线。

洋红色虚线显示第二列的基线,即图像的基线。调整valign=c图像,使图像的中心与当前字体大小中既无下行字符也无上行字符的小写字符的中心垂直对齐(例如,“x”通常是这样的字符,而“y”和“h”通常不是)。有关adjustbox更多详细信息,请参阅手册第 13 页上的图表。

\documentclass[border=10pt]{standalone}
\newenvironment{this}{\Huge}{\par}
\standaloneenv{this}
\usepackage{array,tikz}
\usepackage[export]{adjustbox}
\newcolumntype{L}[2]{>{\raggedright\arraybackslash}{#2}{#1}}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{this}
  \tikzmark{a}%
  \begin{tabular}{L{0.5\textwidth}{p}L{100mm}{m}}
    \tikzmark{b}bla-bla piety & \includegraphics[width=50pt, height=50pt, valign=m]{example-image-a}\tikzmark{c}\\
  \end{tabular}%
  \tikzmark{d}%
  \begin{tikzpicture}[remember picture,overlay, font=\normalsize, inner sep=0pt]
    \foreach \i in {a,...,d} \coordinate (\i) at (pic cs:\i);
    \draw [blue, densely dashed] (a |- b) -- (d |- b) node [pos=.65, above] {column 1 baseline};
    \draw [magenta, densely dotted] (a |- c) -- (d |- c) node [pos=.85, above] {column 2 baseline};
  \end{tikzpicture}%
\end{this}
\end{document}

答案2

图片的参考点始终是左下角;使用m不行。你可以改用adjustbox

\documentclass{book}
\usepackage{graphicx}
\usepackage[export]{adjustbox}

\begin{document}

\begin{tabular}{ll}
\includegraphics[width=25pt, height=25pt, valign=t]{example-image-a} &
\includegraphics[width=90pt, height=90pt, valign=t]{example-image-b} \\
\includegraphics[width=25pt, height=25pt, valign=c]{example-image-a} &
\includegraphics[width=90pt, height=90pt, valign=c]{example-image-b} \\
\includegraphics[width=25pt, height=25pt, valign=b]{example-image-a} &
\includegraphics[width=90pt, height=90pt, valign=b]{example-image-b} \\
\end{tabular}

\end{document}

在此处输入图片描述

答案3

如果要对齐到顶部,则需要 p 列类型而不是 m 列。然后——因为图片的基线位于底部——您需要将它们“推”到基线以下。在 p 列单元格中,可以使用 \vspace{0pt} 完成此操作,在 l 列中,您可以使用 \raisebox:

\documentclass{book}
\usepackage{graphicx}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}

\begin{document}

\begin{tabular}{L{0.5\textwidth}l}    
 \vspace{0pt}
 \includegraphics[width=25pt, height=25pt]{example-image} &
 \raisebox{-\height}{\includegraphics[width=150pt, height=150pt]{example-image}}
\end{tabular}

\end{document}

图形对齐

相关内容