好吧,我放弃了。这就是问题所在。我想将图像置于表格列的中心。
对此有解决方案,例如这里但当我使用列规范时,这不起作用p
。我知道的另一个可行的解决方案是使用m
所有列,如下所示这里但是这使用m
并且我需要使用,p
因为我需要使用 tex4ht 来生成这些表格。我刚刚尝试过makecell
包。我可以让它水平居中图像(也适用于 tex4ht),但不知道如何使用这个包垂直居中。软件包文档我不清楚。
问题是 tex4ht 不支持m
,它忽略了列宽。所以必须使用p
,但我不知道如何使用p
因此,我正在寻找一种解决方案,使图像在列中居中,但不使用m
,并且必须能够使用p
。这是我尝试过的 (MWE)
\documentclass{article}
\usepackage{mwe}
\usepackage{longtable}
\usepackage{hyperref}
\usepackage{array}
\usepackage{makecell} %for makecell
%\usepackage{blindtext}
\newcommand{\mytext}{bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}
\begin{document}
\begin{longtable}{|p{1in}|p{1in}|p{2in}|}\hline
\mytext&\mytext&
\raisebox{-.5\height}{\includegraphics[scale=0.25]{example-image}}
\\\hline
\end{longtable}
\begin{longtable}{|p{1in}|p{1in}|p{2in}|}\hline
\mytext&\mytext&
\makecell[cc]{\includegraphics[scale=0.25]{example-image}}
%centered ok, but only horizonatlly, how to make it center vertically?
%\makecell[{{m{2in}}}]{\includegraphics[scale=0.25]{example-image}} %not working
\\\hline
\end{longtable}
\begin{longtable}{|m{1in}|m{1in}|m{2in}|}\hline
\mytext&\mytext&
\includegraphics[scale=0.25]{example-image}
\\\hline
\end{longtable}
\end{document}
pdflatex 输出
因此,该m
解决方案在 pdflatex 中有效(但在 tex4ht 中无效)。\raisebox{-.5\height}
如果不使用,则有效p
,但我需要使用p
,否则表格会太宽。
这是 tex4ht 的输出(必须使用 p-width 选项,否则 tex4ht 将忽略p
)
htlatex foo.tex "htm,p-width"
可以看到p
效果,但图像未居中对齐。虽然makecell
对齐正常,但仅水平对齐,m
图像对齐后,却丢失了宽度规范。(Latex 不是很有趣吗?)
答案1
我找到了一种适用于 tex4ht 和 pdflatex 的解决方案,可以垂直对齐表格单元格中的图像。
对于 pdf,我会使用它,m
因为它几乎不需要额外的努力。因为tex4ht
我不得不\Css
在经过多次尝试和错误后才使用配置。
然后在 latex 文件中,我检查是否正在运行 tex4ht 或 pdflatex,并进行相应设置。以下是同一 latex 文件针对 pdf 和 html 的输出
以下是代码
\documentclass[11pt]{article}
\usepackage{mwe}
\usepackage{longtable}
\usepackage{array}
\newcommand{\mytext}{bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}
\usepackage{hyperref}
\begin{document}
\ifdefined\HCode
\Css{td img {display:block; margin: 0 auto;}}
\Css{td {vertical-align: middle;}}
\begin{longtable}{|p{1in}|p{1in}|p{2in}|}\hline
\else
\begin{longtable}{|m{1in}|m{1in}|m{2in}|}\hline
\fi
\mytext &\mytext &
\includegraphics[scale=0.25]{example-image}%
\\\hline
\end{longtable}
\end{document}
要使用 tex4ht 运行,命令是
pdflatex foo.tex
texlive 2013,Linux mint
答案2
这里有两个解决方案 – 至少可以生成 pdf。第一个使用包中的\makecell
和 \thead
命令 makecell
,第二个使用命令\raisebox
并需要手动调整:
\documentclass[11pt]{article}
\usepackage{mwe}
\usepackage{longtable}
\usepackage{array, mathtools}
\usepackage{multirow}
\newcolumntype{P}{>{\centering\arraybackslash}p{2in}}
\usepackage{makecell} %for makecell
\renewcommand{\theadalign}{{P}c}%
\renewcommand{\cellalign}{{p{1in}}c}
\newcommand{\mytext}{bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}
\usepackage{hyperref}
\begin{document}
\begin{longtable}{|p{1in}|p{1in}|P|}
\caption{Mytable}\\
\hline
\makecell{\mytext }&\makecell{ \mytext} & \thead{\includegraphics[scale=0.25]{example-image}}%
\\
\hline
\end{longtable}
\begin{longtable}{|p{1in}|p{1in}|P|}
\caption{Mytable}\\
\hline
{\mytext }&{ \mytext} &\raisebox{-1.6\totalheight}[0\height][\height]{\includegraphics[scale=0.25]{example-image}}
\\
\hline
\end{longtable}
\end{document}