对于 tex4ht,如何使用 p{} 使图像在表格中垂直居中,而不使用 m?

对于 tex4ht,如何使用 p{} 使图像在表格中垂直居中,而不使用 m?

好吧,我放弃了。这就是问题所在。我想将图像置于表格列的中心。

对此有解决方案,例如这里但当我使用列规范时,这不起作用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 输出

Mathematica 图形

因此,该m解决方案在 pdflatex 中有效(但在 tex4ht 中无效)。\raisebox{-.5\height}如果不使用,则有效p,但我需要使用p,否则表格会太宽。

这是 tex4ht 的输出(必须使用 p-width 选项,否则 tex4ht 将忽略p

 htlatex foo.tex "htm,p-width"

可以看到p效果,但图像未居中对齐。虽然makecell对齐正常,但仅水平对齐,m图像对齐后,却丢失了宽度规范。(Latex 不是很有趣吗?)

Mathematica 图形

答案1

我找到了一种适用于 tex4ht 和 pdflatex 的解决方案,可以垂直对齐表格单元格中的图像。

对于 pdf,我会使用它,m因为它几乎不需要额外的努力。因为tex4ht我不得不\Css在经过多次尝试和错误后才使用配置。

然后在 latex 文件中,我检查是否正在运行 tex4ht 或 pdflatex,并进行相应设置。以下是同一 latex 文件针对 pdf 和 html 的输出

Mathematica 图形

以下是代码

\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} 

在此处输入图片描述

相关内容