不使用表格将图像与文本对齐

不使用表格将图像与文本对齐

问题:

我搜索过如何对齐文本无需使用表格使用 LaTex。我想要的是将图像在一侧对齐,将文本与右侧的相应图像对齐。

问题示例:

在此处输入图片描述

期望的结果:

基本上,我希望能够将照片和相应的文本精确地水平对齐到照片的中间。每张照片/文本部分都应由一个箭头分开,该箭头精确地垂直对齐到每张照片的中间。

如果有人能够在不使用任何表格的情况下给出最佳做法的建议,我将不胜感激。

答案1

表格环境确实是实现此目的的最简单方法。这是使用常规的解决方案tabular。您可以tabu毫无问题地将其与包一起使用。

箭取自使用 TikZ 制作精美的箭头

兼容性siunitx

这里使用该cellspace包来使图像周围的垂直间距变得美观。 在列规范之前cellspace定义一个说明符。如果您使用的是,它也定义了一个列,则需要将列说明符更改为。(通过创建适当的列说明符自动处理此问题,但您需要在表格中更改代码。)SsiunitxScellspaceCsiunitxC

代码

\documentclass[svgnames]{article}
\usepackage{tabu} % just to show compatibility
\usepackage{array}
\usepackage[demo]{graphicx}
\usepackage{tikz}
\usetikzlibrary{fadings,shapes.arrows,shadows}

\usepackage{cellspace, graphicx}
\renewcommand\cellspacetoplimit{3pt}
\renewcommand\cellspacebottomlimit{3pt}
\usepackage{xparse}


\tikzfading[name=arrowfading, 
            top color=transparent!0, bottom color=transparent!95]
\tikzset{arrowfill/.style={#1,general 
    shadow={fill=black, shadow yshift=-0.8ex, path fading=arrowfading}}}
\tikzset{arrowstyle/.style n args={3}{draw=#2,arrowfill={#3}, 
    single arrow,minimum height=#1, single arrow,
    single arrow head extend=.3cm,}}

\NewDocumentCommand{\tikzfancyarrow}
     {O{2cm} O{FireBrick} O{top color=OrangeRed!20, bottom color=Red} m}{
     \tikz[baseline=-0.5ex]\node [arrowstyle={#1}{#2}{#3}] {#4};
}
\newcommand{\myarrow}{
   \tikzfancyarrow[1cm][GreenYellow][top color=DarkSeaGreen, bottom
    color=GreenYellow,rotate=-90]{}}

\begin{document}

% If you are using siunitx, change S to C in this tabular
% 
\begin{tabular}{S{>{\centering}m{1.25in}}S{m{4in}}}
\includegraphics[width=1in]{foo} & This is some text that describes the
 first figure. It will take up as much space as is needed and will remain
 centred I hope.\\
\myarrow & \\
\includegraphics[width=1in,height=2in]{foo} & This is some text that
 describes the second figure. It will take up as much space as is needed 
 and will remain centred. As the text gets longer  it centres in the way 
 that we want. So it seems that this is working.\\
\myarrow & \\
\includegraphics[width=1in,height=.5in]{foo} & This is the text on the last 
image.
\end{tabular}
\end{document}

在此处输入图片描述

答案2

此解决方案不依赖于表格。但它是否适用于您的模板:这只能是猜测。正如 Alan Munn 指出的那样,我们不可能知道。

我定义了两个新命令:

  • \imgfraction{<fraction>}采用单个参数,指定图像占据的文本宽度分数,例如\imgfraction{.75}\imgfraction{.002}

  • \imgtxt[<options passed to \includegraphics>]{<image filename>}{<text>}采用一个可选参数和两个必选参数,其中第一个参数指定要传递给的选项\includegraphics,第二个参数指定图像的文件名,第三个参数指定文本,例如\imgtxt[width=.75\linewidth]{example-image-a}{Great explanation of A's importance}\imgtxt{small-image}{Questions raised}

使用 TikZ 绘制箭头。它被保存在一个框中以供重复使用,以避免重复渲染。

该命令的配置使其通常能够正确决定是否使用箭头。例如,它可以处理文档中的多个图像序列(使用afterpage)。但是,据我了解您的用例,我认为您不需要本身跨越多个页面的序列,并且代码并非为应对这种可能性而设计的。

以下是两个序列的示例,一个序列使用mwe软件包中的示例图像,另一个序列使用标准发行版中提供的无处不在的老虎。请注意,\imgfraction{}在中间使用 来调整第二个序列中老虎所占页面的比例。

图像序列

\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{calc,tikz,afterpage,kantlipsum}
\usetikzlibrary{shapes.arrows,shadows}
\newcommand\imgtxt[3][]{%
  \iffirstimgtxt\firstimgtxtfalse\afterpage{\global\firstimgtxttrue}%
  \else
    \noindent\begin{minipage}{\imgtxtimgwidth}
      \centering
      \usebox\imgtxtarrow
      \medskip
      \par
    \end{minipage}
    \par
  \fi
  \noindent
  \begin{minipage}[c]{\imgtxtimgwidth}
    \centering\includegraphics[#1]{#2}\medskip\par
  \end{minipage}%
  \begin{minipage}[c]{\imgtxttxtwidth}
    #3\medskip\par
  \end{minipage}\par}
\newif\iffirstimgtxt
\firstimgtxttrue
\newsavebox\imgtxtarrow
\sbox\imgtxtarrow{%
  \tikz{%
    \node [single arrow, drop shadow, draw=Green4, line width=1pt, inner color=white!50!Green4, outer color=white!10!Green4, shape border uses incircle, shape border rotate=-90, text height=2.5mm, text width=5mm]  {};
  }%
}
\newlength\imgtxtimgwidth
\newlength\imgtxttxtwidth
\newcommand*\imgfraction[1]{%
  \setlength\imgtxtimgwidth{#1\textwidth}%
  \setlength\imgtxttxtwidth{\textwidth-#1\textwidth}%
}
\imgfraction{.25}
\begin{document}
  \imgtxt[width=.75\linewidth]{example-image-a}{\kant[1]}
  \imgtxt[width=.75\linewidth]{example-image-b}{A very little text.}
  \imgtxt[width=.75\linewidth]{example-image-c}{\kant[2]}

  \newpage\imgfraction{.3}

  \imgtxt[width=.9\linewidth]{tiger}{Introducing tigers and other big cats.}
  \imgtxt[width=.9\linewidth]{tiger}{A very little more text.}
  \imgtxt[width=.9\linewidth]{tiger}{\kant[3]}

\end{document}

相关内容