Arrows around figure - no TikZ

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
2
down vote

favorite












I currently have a grid of figures as follows:



documentclassarticle
usepackagegraphicx
usepackageamsmath
usepackage[verbose,margin=0.1in]geometry
graphicspath./images/
newcommandxdownarrow[1]%
leftdownarrowvbox to #1right.kern-nulldelimiterspace


begindocument
beginfigure
hspace0.6cm$pmbxrightarrowhspace2.3cmlabel1hspace2.9cmlabel2hspace2.4cmlabel3hspace2.95cmlabel4hspace2.2cm$
\[-0.4cm]
beginminipage[t][14.2cm][b]0.01linewidth
rotatebox90$pmbvlabel1$
vfill
rotatebox90$pmbvlabel2$
endminipage
beginminipage[t][b]0.01linewidth
$pmbxdownarrow7.4cm$
endminipage
beginminipage[t][b]0.97linewidth
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image1.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image2.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image3.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image4.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image5.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image8.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image9.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image10.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image11.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image12.pdf\
includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]image13.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image14.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image15.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image16.pdf
endminipage
endfigure
enddocument


This generates a 4x4 grid of images, with a right arrow above with 4 labels spaces, and a down arrow to the left with two spaced labels. Those hard-coded lengths are not practical. As this will not be the last time I need to make such a figure, how can I get the above to work properly? I want the following to happen automatically through the scaling of the 3d mini-page, with the figures:



  1. Arrow above spans entire horizontal range of the grid

  2. Above said arrow 4 labels spaced equally, such that they are centered on each plot horizontally

  3. To the left an arrow spanning the entire vertical range of the grid

  4. Two labels rotated to the left of said arrow, the upper one ending at the start of the arrow, the lower one starting at the end

The main problem is that the lengths are somehow not set, so I cannot use vfill and hfill properly, nor are the mini-pages aligned without specifying that first height. If the figures minipage could be set before the rest of the figure elements, perhaps then all the lengths (text height, line width etc.) will be set.



I do not want a tikz solution, but am open to dropping the mini-pages or anything else.










share|improve this question





















  • Would a picture (pict2e package) overlay be acceptable?
    – John Kormylo
    2 hours ago










  • @JohnKormylo anything that doesn't feel like I need to program a drawing from scratch. I am looking for an easy to write, flexible solution, that doesn't require me to set nodes, anchors, coordinates and the like. I feel something like "an arrow the entire length of the figure" should be easy to do.
    – kabanus
    2 hours ago










  • The picture environment has few capabilities, but it can draw arrows and labels. It is built into LaTeX, pict2e mostly allows better diagonal lines.
    – John Kormylo
    2 hours ago










  • OTOH, I would have to replace all your images with something available to me, like example-image.
    – John Kormylo
    2 hours ago











  • @JohnKormylo the name of everything is just for the example, of course you need your own images to test :). Thanks.
    – kabanus
    2 hours ago














up vote
2
down vote

favorite












I currently have a grid of figures as follows:



documentclassarticle
usepackagegraphicx
usepackageamsmath
usepackage[verbose,margin=0.1in]geometry
graphicspath./images/
newcommandxdownarrow[1]%
leftdownarrowvbox to #1right.kern-nulldelimiterspace


begindocument
beginfigure
hspace0.6cm$pmbxrightarrowhspace2.3cmlabel1hspace2.9cmlabel2hspace2.4cmlabel3hspace2.95cmlabel4hspace2.2cm$
\[-0.4cm]
beginminipage[t][14.2cm][b]0.01linewidth
rotatebox90$pmbvlabel1$
vfill
rotatebox90$pmbvlabel2$
endminipage
beginminipage[t][b]0.01linewidth
$pmbxdownarrow7.4cm$
endminipage
beginminipage[t][b]0.97linewidth
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image1.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image2.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image3.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image4.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image5.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image8.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image9.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image10.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image11.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image12.pdf\
includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]image13.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image14.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image15.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image16.pdf
endminipage
endfigure
enddocument


This generates a 4x4 grid of images, with a right arrow above with 4 labels spaces, and a down arrow to the left with two spaced labels. Those hard-coded lengths are not practical. As this will not be the last time I need to make such a figure, how can I get the above to work properly? I want the following to happen automatically through the scaling of the 3d mini-page, with the figures:



  1. Arrow above spans entire horizontal range of the grid

  2. Above said arrow 4 labels spaced equally, such that they are centered on each plot horizontally

  3. To the left an arrow spanning the entire vertical range of the grid

  4. Two labels rotated to the left of said arrow, the upper one ending at the start of the arrow, the lower one starting at the end

The main problem is that the lengths are somehow not set, so I cannot use vfill and hfill properly, nor are the mini-pages aligned without specifying that first height. If the figures minipage could be set before the rest of the figure elements, perhaps then all the lengths (text height, line width etc.) will be set.



I do not want a tikz solution, but am open to dropping the mini-pages or anything else.










share|improve this question





















  • Would a picture (pict2e package) overlay be acceptable?
    – John Kormylo
    2 hours ago










  • @JohnKormylo anything that doesn't feel like I need to program a drawing from scratch. I am looking for an easy to write, flexible solution, that doesn't require me to set nodes, anchors, coordinates and the like. I feel something like "an arrow the entire length of the figure" should be easy to do.
    – kabanus
    2 hours ago










  • The picture environment has few capabilities, but it can draw arrows and labels. It is built into LaTeX, pict2e mostly allows better diagonal lines.
    – John Kormylo
    2 hours ago










  • OTOH, I would have to replace all your images with something available to me, like example-image.
    – John Kormylo
    2 hours ago











  • @JohnKormylo the name of everything is just for the example, of course you need your own images to test :). Thanks.
    – kabanus
    2 hours ago












up vote
2
down vote

favorite









up vote
2
down vote

favorite











I currently have a grid of figures as follows:



documentclassarticle
usepackagegraphicx
usepackageamsmath
usepackage[verbose,margin=0.1in]geometry
graphicspath./images/
newcommandxdownarrow[1]%
leftdownarrowvbox to #1right.kern-nulldelimiterspace


begindocument
beginfigure
hspace0.6cm$pmbxrightarrowhspace2.3cmlabel1hspace2.9cmlabel2hspace2.4cmlabel3hspace2.95cmlabel4hspace2.2cm$
\[-0.4cm]
beginminipage[t][14.2cm][b]0.01linewidth
rotatebox90$pmbvlabel1$
vfill
rotatebox90$pmbvlabel2$
endminipage
beginminipage[t][b]0.01linewidth
$pmbxdownarrow7.4cm$
endminipage
beginminipage[t][b]0.97linewidth
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image1.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image2.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image3.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image4.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image5.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image8.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image9.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image10.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image11.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image12.pdf\
includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]image13.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image14.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image15.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image16.pdf
endminipage
endfigure
enddocument


This generates a 4x4 grid of images, with a right arrow above with 4 labels spaces, and a down arrow to the left with two spaced labels. Those hard-coded lengths are not practical. As this will not be the last time I need to make such a figure, how can I get the above to work properly? I want the following to happen automatically through the scaling of the 3d mini-page, with the figures:



  1. Arrow above spans entire horizontal range of the grid

  2. Above said arrow 4 labels spaced equally, such that they are centered on each plot horizontally

  3. To the left an arrow spanning the entire vertical range of the grid

  4. Two labels rotated to the left of said arrow, the upper one ending at the start of the arrow, the lower one starting at the end

The main problem is that the lengths are somehow not set, so I cannot use vfill and hfill properly, nor are the mini-pages aligned without specifying that first height. If the figures minipage could be set before the rest of the figure elements, perhaps then all the lengths (text height, line width etc.) will be set.



I do not want a tikz solution, but am open to dropping the mini-pages or anything else.










share|improve this question













I currently have a grid of figures as follows:



documentclassarticle
usepackagegraphicx
usepackageamsmath
usepackage[verbose,margin=0.1in]geometry
graphicspath./images/
newcommandxdownarrow[1]%
leftdownarrowvbox to #1right.kern-nulldelimiterspace


begindocument
beginfigure
hspace0.6cm$pmbxrightarrowhspace2.3cmlabel1hspace2.9cmlabel2hspace2.4cmlabel3hspace2.95cmlabel4hspace2.2cm$
\[-0.4cm]
beginminipage[t][14.2cm][b]0.01linewidth
rotatebox90$pmbvlabel1$
vfill
rotatebox90$pmbvlabel2$
endminipage
beginminipage[t][b]0.01linewidth
$pmbxdownarrow7.4cm$
endminipage
beginminipage[t][b]0.97linewidth
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image1.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image2.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image3.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image4.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image5.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image6.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image8.pdf\
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]image9.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image10.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image11.pdf
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]image12.pdf\
includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]image13.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image14.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image15.pdf
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]image16.pdf
endminipage
endfigure
enddocument


This generates a 4x4 grid of images, with a right arrow above with 4 labels spaces, and a down arrow to the left with two spaced labels. Those hard-coded lengths are not practical. As this will not be the last time I need to make such a figure, how can I get the above to work properly? I want the following to happen automatically through the scaling of the 3d mini-page, with the figures:



  1. Arrow above spans entire horizontal range of the grid

  2. Above said arrow 4 labels spaced equally, such that they are centered on each plot horizontally

  3. To the left an arrow spanning the entire vertical range of the grid

  4. Two labels rotated to the left of said arrow, the upper one ending at the start of the arrow, the lower one starting at the end

The main problem is that the lengths are somehow not set, so I cannot use vfill and hfill properly, nor are the mini-pages aligned without specifying that first height. If the figures minipage could be set before the rest of the figure elements, perhaps then all the lengths (text height, line width etc.) will be set.



I do not want a tikz solution, but am open to dropping the mini-pages or anything else.







floats alignment






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 4 hours ago









kabanus

1404




1404











  • Would a picture (pict2e package) overlay be acceptable?
    – John Kormylo
    2 hours ago










  • @JohnKormylo anything that doesn't feel like I need to program a drawing from scratch. I am looking for an easy to write, flexible solution, that doesn't require me to set nodes, anchors, coordinates and the like. I feel something like "an arrow the entire length of the figure" should be easy to do.
    – kabanus
    2 hours ago










  • The picture environment has few capabilities, but it can draw arrows and labels. It is built into LaTeX, pict2e mostly allows better diagonal lines.
    – John Kormylo
    2 hours ago










  • OTOH, I would have to replace all your images with something available to me, like example-image.
    – John Kormylo
    2 hours ago











  • @JohnKormylo the name of everything is just for the example, of course you need your own images to test :). Thanks.
    – kabanus
    2 hours ago
















  • Would a picture (pict2e package) overlay be acceptable?
    – John Kormylo
    2 hours ago










  • @JohnKormylo anything that doesn't feel like I need to program a drawing from scratch. I am looking for an easy to write, flexible solution, that doesn't require me to set nodes, anchors, coordinates and the like. I feel something like "an arrow the entire length of the figure" should be easy to do.
    – kabanus
    2 hours ago










  • The picture environment has few capabilities, but it can draw arrows and labels. It is built into LaTeX, pict2e mostly allows better diagonal lines.
    – John Kormylo
    2 hours ago










  • OTOH, I would have to replace all your images with something available to me, like example-image.
    – John Kormylo
    2 hours ago











  • @JohnKormylo the name of everything is just for the example, of course you need your own images to test :). Thanks.
    – kabanus
    2 hours ago















Would a picture (pict2e package) overlay be acceptable?
– John Kormylo
2 hours ago




Would a picture (pict2e package) overlay be acceptable?
– John Kormylo
2 hours ago












@JohnKormylo anything that doesn't feel like I need to program a drawing from scratch. I am looking for an easy to write, flexible solution, that doesn't require me to set nodes, anchors, coordinates and the like. I feel something like "an arrow the entire length of the figure" should be easy to do.
– kabanus
2 hours ago




@JohnKormylo anything that doesn't feel like I need to program a drawing from scratch. I am looking for an easy to write, flexible solution, that doesn't require me to set nodes, anchors, coordinates and the like. I feel something like "an arrow the entire length of the figure" should be easy to do.
– kabanus
2 hours ago












The picture environment has few capabilities, but it can draw arrows and labels. It is built into LaTeX, pict2e mostly allows better diagonal lines.
– John Kormylo
2 hours ago




The picture environment has few capabilities, but it can draw arrows and labels. It is built into LaTeX, pict2e mostly allows better diagonal lines.
– John Kormylo
2 hours ago












OTOH, I would have to replace all your images with something available to me, like example-image.
– John Kormylo
2 hours ago





OTOH, I would have to replace all your images with something available to me, like example-image.
– John Kormylo
2 hours ago













@JohnKormylo the name of everything is just for the example, of course you need your own images to test :). Thanks.
– kabanus
2 hours ago




@JohnKormylo the name of everything is just for the example, of course you need your own images to test :). Thanks.
– kabanus
2 hours ago










2 Answers
2






active

oldest

votes

















up vote
1
down vote













This solution uses the picture environment. It also packs the images into a minimal size using vbox and hbox with a space between each row and column.



One annoying aspect of picture is that it uses its own units. In this case I used unitlength=1pt and used strip@pt (renamed unit) to convert lengths to picture units.



Rather than put each label individually, it was easier to create a row of makeboxes. The only tricky part was determining the height of each row of pictures.



documentclassarticle
usepackagegraphicx
usepackageamsmath
usepackage[verbose,margin=0.1in]geometry

makeatletter
letunit=strip@pt
makeatother

newlengthrowheight

begindocument
beginfigure
setbox0=vboxsettowidthlineskipspace%
hbox%
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
hbox%
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
hbox%
includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
hbox%
includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]example-image
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image%
settoheightrowheightincludegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image% if all rows the same
unitlength=1pt
centering
beginpicture(unitdimexpr wd0+14ptrelax,unitdimexpr ht0+14ptrelax)(0,0)
put(14,0)usebox0
put(10,unitdimexprht0+4ptrelax) vector(1,0)unitdimexprwd0+4ptrelax
put(14,unitdimexprht0+8ptrelax) makebox[0.249linewidth]label1
makebox[0.230linewidth]label2
makebox[0.230linewidth]label3
makebox[0.230linewidth]label4
put(10,unitdimexprht0+4ptrelax)vector(0,-1)unitdimexprht0+4ptrelax
put(0,0)rotatebox[origin=tl]90makebox[rowheight]label8
makebox[rowheight]label7
makebox[rowheight]label6
makebox[rowheight]label5
endpicture
endfigure
enddocument


demo






share|improve this answer





























    up vote
    1
    down vote













    Part 1: a partial non-TikZ solution



    Here's the start of a solution that does not resort to TikZ. There's a lot more work that needs to be done, but perhaps it sheds some light on what you need.



    documentclassarticle
    usepackage[draft]graphicx
    usepackageamsmath
    usepackage[verbose,margin=0.1in]geometry
    graphicspath./images/

    newcommandmyxdownarrow[2]$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%
    newcommandmyxrightarrow[1]rotatebox90$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%

    newsaveboxaepic
    newlengthaelength

    begindocument
    setlengthaelengthdimexpr0.97linewidth%%
    beginlrboxaepic
    setlengthtabcolsep0.5pt%%
    begintabular[t]c@hspace1emcccc
    & label1 & label2 & label3 & label4 \
    rotatebox90$pmbvlabel1$ &
    includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image1.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image2.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image3.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image4.pdf\
    &
    includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image5.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image6.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image7.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image8.pdf\
    &
    includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image9.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image10.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image11.pdf &
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image12.pdf\
    rotatebox90$pmbvlabel2$
    &
    includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]image13.pdf &
    includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image14.pdf &
    includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image15.pdf &
    includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image16.pdf
    endtabular
    endlrbox%%

    beginfigure
    hspace2emmyxrightarrowdimexprwdaepic -2.25em\[-0.4cm]%%
    makebox[0pt][l]raisebox-height[0pt][dimexprheight+depth]
    hspace*1emmyxdownarrowdimexprhtaepic+dpaepic-1exrelax%%
    raisebox-height[0pt][dimexprheight+depth]useboxaepic%%
    endfigure

    enddocument


    enter image description here



    Part 2: The Bugaboo of TikZ



    So, I know you said you didn't want to use TikZ. But, unless you have constraints coming from a publisher or advisor..., I feel you can get this done very easily and cleanly using TikZ. So, here is my TikZ version of a solution. I explain what I've done after the code for this solution.



    enter image description here



    Here's the code to produce this



    documentclassarticle
    usepackage[draft]graphicx
    usepackageamsmath
    usepackage[showframe,margin=0.1in]geometry
    graphicspath./images/

    usepackagetikz
    usetikzlibrarycalc,fit,arrows.meta
    newlengthaelength
    newboxaepic

    newcommandaegraphic[3] %%
    tikz[remember picture,overlay] node (#2/BL) ;%%
    tikz node[anchor=south west,inner sep=0pt] (#2) at (#2/BL) includegraphics[#1]#3;%%


    begindocument

    setlengthaelengthdimexprlinewidth-3em%%
    beginfigure
    setlengthtabcolsep1.5pt%%
    hspace*3em%%
    begintabular[t]cccc
    aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]A1image1.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A2image2.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A3image3.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A4image4.pdf\
    %% ------------------------------------------------------------------------------------
    aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]B1image5.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B2image6.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B3image7.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B4image8.pdf\
    %% ------------------------------------------------------------------------------------
    aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]C1image9.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C2image10.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C3image11.pdf &
    aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C4image12.pdf\
    %% ------------------------------------------------------------------------------------
    aegraphic[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]D1image13.pdf &
    aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D2image14.pdf &
    aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D3image15.pdf &
    aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D4image16.pdf
    endtabular%%
    begintikzpicture[remember picture,overlay]
    node[fit=(A1) (A2) (A3) (A4)
    (B1) (B2) (B3) (B4)
    (C1) (C2) (C3) (C4)
    (D1) (D2) (D3) (D4),
    inner sep=0pt,
    ] (PIC) ;

    draw[line width=1pt,arrows=-Stealth[length=4mm]] ([xshift=-1em]PIC.north west) -- ([xshift=-1em]PIC.south west);
    draw[line width=1pt,arrows=-Stealth[length=4mm]] ([yshift=1em]PIC.north west) -- ([yshift=1em]PIC.north east);

    node[anchor=south] (COL1/label) at ([yshift=1em]A1|-PIC.north) Column Label 1;
    node[anchor=south] (COL2/label) at ([yshift=1em]A2|-PIC.north) Column Label 2;
    node[anchor=south] (COL3/label) at ([yshift=1em]A3|-PIC.north) Column Label 3;
    node[anchor=south] (COL4/label) at ([yshift=1em]A4|-PIC.north) Column Label 4;

    node[anchor=center,rotate=90] (ROW1/label) at ([xshift=-1.5em]A1-|PIC.west) ROW 1 label;
    node[anchor=center,rotate=90] (ROW2/label) at ([xshift=-1.5em]B1-|PIC.west) ROW 2 label;
    node[anchor=center,rotate=90] (ROW3/label) at ([xshift=-1.5em]C1-|PIC.west) ROW 3 label;
    node[anchor=center,rotate=90] (ROW4/label) at ([xshift=-1.5em]D1-|PIC.west) ROW 4 label;

    node[blue,anchor=south] at (A1.north) Description of first pic;

    endtikzpicture
    endfigure

    enddocument


    Explanation of TikZ solution



    I'm trying to minimize your headaches with TikZ here. The key here is two-fold: using a overlays and fitting.



    I still use the tabular environment for laying out the picture. This could be done in a Tikz Picture. But, since I don't know all your potential constraints, I've forgone making the entire figure that way. In particular, I don't know how you want to handle the alignment pictures of unequal height or width.



    Each cell of tabular tabular environment has three things going on:



    • A TikZ mark is created. This is to help us later remember where the picture is.

    • Using the TikZ mark, another TikZ node is created in which the image is going to be placed. This will give us information about where the edges of the picture are that a TikZ mark doesn't provide.

    • I define a command aegraphic to simplify things a bit. And, it makes the code more readable. This command takes three arguments. The first is optional and contains the key values you want to pass along to includegraphics, the second argument is the name of the node in which you'll be placing the graphic, and the third argument is name of the image file.

    Once the table of images is created, I create a PIC node to fit all the nodes of each individual graphic used. Now I can easily determine where the arrows along the top and left of the image should be place. I can also easily place labels adjacent to rows (properly rotated) and above each column.



    The key points of TikZ that I use are the following:



    • Anchoring: this helps us place the elements of the picture relative to each other without know exactly where they are.

    • Rotation: rotation happens around the anchor of the node.

    • The (<node_A>-|<node_B>) syntax: this grabs the y coordinate from node A and the x coordinate of node B. Similarly (<node_A>|-<node_B>) just flips this around.

    • The ([<options>]node-name) syntax: this allows fine tuning such as displacing the arrows along the edges of the image relative to the nodes defined by the table.


    • remember picture,overlay syntax: this is telling TikZ to remember where this picture is being placed, essentially allowing you to place the TikZ picture wherever you would like on the page irrespective of other content.





    share|improve this answer






















    • I like it, but I will wait a few days before marking the solution. Using a table is smart, did not consider that.
      – kabanus
      1 hour ago










    Your Answer







    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "85"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: false,
    noModals: false,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f453092%2farrows-around-figure-no-tikz%23new-answer', 'question_page');

    );

    Post as a guest






























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote













    This solution uses the picture environment. It also packs the images into a minimal size using vbox and hbox with a space between each row and column.



    One annoying aspect of picture is that it uses its own units. In this case I used unitlength=1pt and used strip@pt (renamed unit) to convert lengths to picture units.



    Rather than put each label individually, it was easier to create a row of makeboxes. The only tricky part was determining the height of each row of pictures.



    documentclassarticle
    usepackagegraphicx
    usepackageamsmath
    usepackage[verbose,margin=0.1in]geometry

    makeatletter
    letunit=strip@pt
    makeatother

    newlengthrowheight

    begindocument
    beginfigure
    setbox0=vboxsettowidthlineskipspace%
    hbox%
    includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    hbox%
    includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    hbox%
    includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
    hbox%
    includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]example-image
    includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
    includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image%
    settoheightrowheightincludegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image% if all rows the same
    unitlength=1pt
    centering
    beginpicture(unitdimexpr wd0+14ptrelax,unitdimexpr ht0+14ptrelax)(0,0)
    put(14,0)usebox0
    put(10,unitdimexprht0+4ptrelax) vector(1,0)unitdimexprwd0+4ptrelax
    put(14,unitdimexprht0+8ptrelax) makebox[0.249linewidth]label1
    makebox[0.230linewidth]label2
    makebox[0.230linewidth]label3
    makebox[0.230linewidth]label4
    put(10,unitdimexprht0+4ptrelax)vector(0,-1)unitdimexprht0+4ptrelax
    put(0,0)rotatebox[origin=tl]90makebox[rowheight]label8
    makebox[rowheight]label7
    makebox[rowheight]label6
    makebox[rowheight]label5
    endpicture
    endfigure
    enddocument


    demo






    share|improve this answer


























      up vote
      1
      down vote













      This solution uses the picture environment. It also packs the images into a minimal size using vbox and hbox with a space between each row and column.



      One annoying aspect of picture is that it uses its own units. In this case I used unitlength=1pt and used strip@pt (renamed unit) to convert lengths to picture units.



      Rather than put each label individually, it was easier to create a row of makeboxes. The only tricky part was determining the height of each row of pictures.



      documentclassarticle
      usepackagegraphicx
      usepackageamsmath
      usepackage[verbose,margin=0.1in]geometry

      makeatletter
      letunit=strip@pt
      makeatother

      newlengthrowheight

      begindocument
      beginfigure
      setbox0=vboxsettowidthlineskipspace%
      hbox%
      includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      hbox%
      includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      hbox%
      includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
      hbox%
      includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]example-image
      includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
      includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image%
      settoheightrowheightincludegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image% if all rows the same
      unitlength=1pt
      centering
      beginpicture(unitdimexpr wd0+14ptrelax,unitdimexpr ht0+14ptrelax)(0,0)
      put(14,0)usebox0
      put(10,unitdimexprht0+4ptrelax) vector(1,0)unitdimexprwd0+4ptrelax
      put(14,unitdimexprht0+8ptrelax) makebox[0.249linewidth]label1
      makebox[0.230linewidth]label2
      makebox[0.230linewidth]label3
      makebox[0.230linewidth]label4
      put(10,unitdimexprht0+4ptrelax)vector(0,-1)unitdimexprht0+4ptrelax
      put(0,0)rotatebox[origin=tl]90makebox[rowheight]label8
      makebox[rowheight]label7
      makebox[rowheight]label6
      makebox[rowheight]label5
      endpicture
      endfigure
      enddocument


      demo






      share|improve this answer
























        up vote
        1
        down vote










        up vote
        1
        down vote









        This solution uses the picture environment. It also packs the images into a minimal size using vbox and hbox with a space between each row and column.



        One annoying aspect of picture is that it uses its own units. In this case I used unitlength=1pt and used strip@pt (renamed unit) to convert lengths to picture units.



        Rather than put each label individually, it was easier to create a row of makeboxes. The only tricky part was determining the height of each row of pictures.



        documentclassarticle
        usepackagegraphicx
        usepackageamsmath
        usepackage[verbose,margin=0.1in]geometry

        makeatletter
        letunit=strip@pt
        makeatother

        newlengthrowheight

        begindocument
        beginfigure
        setbox0=vboxsettowidthlineskipspace%
        hbox%
        includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        hbox%
        includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        hbox%
        includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        hbox%
        includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image%
        settoheightrowheightincludegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image% if all rows the same
        unitlength=1pt
        centering
        beginpicture(unitdimexpr wd0+14ptrelax,unitdimexpr ht0+14ptrelax)(0,0)
        put(14,0)usebox0
        put(10,unitdimexprht0+4ptrelax) vector(1,0)unitdimexprwd0+4ptrelax
        put(14,unitdimexprht0+8ptrelax) makebox[0.249linewidth]label1
        makebox[0.230linewidth]label2
        makebox[0.230linewidth]label3
        makebox[0.230linewidth]label4
        put(10,unitdimexprht0+4ptrelax)vector(0,-1)unitdimexprht0+4ptrelax
        put(0,0)rotatebox[origin=tl]90makebox[rowheight]label8
        makebox[rowheight]label7
        makebox[rowheight]label6
        makebox[rowheight]label5
        endpicture
        endfigure
        enddocument


        demo






        share|improve this answer














        This solution uses the picture environment. It also packs the images into a minimal size using vbox and hbox with a space between each row and column.



        One annoying aspect of picture is that it uses its own units. In this case I used unitlength=1pt and used strip@pt (renamed unit) to convert lengths to picture units.



        Rather than put each label individually, it was easier to create a row of makeboxes. The only tricky part was determining the height of each row of pictures.



        documentclassarticle
        usepackagegraphicx
        usepackageamsmath
        usepackage[verbose,margin=0.1in]geometry

        makeatletter
        letunit=strip@pt
        makeatother

        newlengthrowheight

        begindocument
        beginfigure
        setbox0=vboxsettowidthlineskipspace%
        hbox%
        includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        hbox%
        includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        hbox%
        includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image
        hbox%
        includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249linewidth]example-image
        includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image
        includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230linewidth]example-image%
        settoheightrowheightincludegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230linewidth]example-image% if all rows the same
        unitlength=1pt
        centering
        beginpicture(unitdimexpr wd0+14ptrelax,unitdimexpr ht0+14ptrelax)(0,0)
        put(14,0)usebox0
        put(10,unitdimexprht0+4ptrelax) vector(1,0)unitdimexprwd0+4ptrelax
        put(14,unitdimexprht0+8ptrelax) makebox[0.249linewidth]label1
        makebox[0.230linewidth]label2
        makebox[0.230linewidth]label3
        makebox[0.230linewidth]label4
        put(10,unitdimexprht0+4ptrelax)vector(0,-1)unitdimexprht0+4ptrelax
        put(0,0)rotatebox[origin=tl]90makebox[rowheight]label8
        makebox[rowheight]label7
        makebox[rowheight]label6
        makebox[rowheight]label5
        endpicture
        endfigure
        enddocument


        demo







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 39 mins ago

























        answered 53 mins ago









        John Kormylo

        41.5k12363




        41.5k12363




















            up vote
            1
            down vote













            Part 1: a partial non-TikZ solution



            Here's the start of a solution that does not resort to TikZ. There's a lot more work that needs to be done, but perhaps it sheds some light on what you need.



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[verbose,margin=0.1in]geometry
            graphicspath./images/

            newcommandmyxdownarrow[2]$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%
            newcommandmyxrightarrow[1]rotatebox90$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%

            newsaveboxaepic
            newlengthaelength

            begindocument
            setlengthaelengthdimexpr0.97linewidth%%
            beginlrboxaepic
            setlengthtabcolsep0.5pt%%
            begintabular[t]c@hspace1emcccc
            & label1 & label2 & label3 & label4 \
            rotatebox90$pmbvlabel1$ &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image1.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image2.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image3.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image4.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image5.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image6.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image7.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image8.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image9.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image10.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image11.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image12.pdf\
            rotatebox90$pmbvlabel2$
            &
            includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]image13.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image14.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image15.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image16.pdf
            endtabular
            endlrbox%%

            beginfigure
            hspace2emmyxrightarrowdimexprwdaepic -2.25em\[-0.4cm]%%
            makebox[0pt][l]raisebox-height[0pt][dimexprheight+depth]
            hspace*1emmyxdownarrowdimexprhtaepic+dpaepic-1exrelax%%
            raisebox-height[0pt][dimexprheight+depth]useboxaepic%%
            endfigure

            enddocument


            enter image description here



            Part 2: The Bugaboo of TikZ



            So, I know you said you didn't want to use TikZ. But, unless you have constraints coming from a publisher or advisor..., I feel you can get this done very easily and cleanly using TikZ. So, here is my TikZ version of a solution. I explain what I've done after the code for this solution.



            enter image description here



            Here's the code to produce this



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[showframe,margin=0.1in]geometry
            graphicspath./images/

            usepackagetikz
            usetikzlibrarycalc,fit,arrows.meta
            newlengthaelength
            newboxaepic

            newcommandaegraphic[3] %%
            tikz[remember picture,overlay] node (#2/BL) ;%%
            tikz node[anchor=south west,inner sep=0pt] (#2) at (#2/BL) includegraphics[#1]#3;%%


            begindocument

            setlengthaelengthdimexprlinewidth-3em%%
            beginfigure
            setlengthtabcolsep1.5pt%%
            hspace*3em%%
            begintabular[t]cccc
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]A1image1.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A2image2.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A3image3.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A4image4.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]B1image5.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B2image6.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B3image7.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B4image8.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]C1image9.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C2image10.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C3image11.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C4image12.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]D1image13.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D2image14.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D3image15.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D4image16.pdf
            endtabular%%
            begintikzpicture[remember picture,overlay]
            node[fit=(A1) (A2) (A3) (A4)
            (B1) (B2) (B3) (B4)
            (C1) (C2) (C3) (C4)
            (D1) (D2) (D3) (D4),
            inner sep=0pt,
            ] (PIC) ;

            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([xshift=-1em]PIC.north west) -- ([xshift=-1em]PIC.south west);
            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([yshift=1em]PIC.north west) -- ([yshift=1em]PIC.north east);

            node[anchor=south] (COL1/label) at ([yshift=1em]A1|-PIC.north) Column Label 1;
            node[anchor=south] (COL2/label) at ([yshift=1em]A2|-PIC.north) Column Label 2;
            node[anchor=south] (COL3/label) at ([yshift=1em]A3|-PIC.north) Column Label 3;
            node[anchor=south] (COL4/label) at ([yshift=1em]A4|-PIC.north) Column Label 4;

            node[anchor=center,rotate=90] (ROW1/label) at ([xshift=-1.5em]A1-|PIC.west) ROW 1 label;
            node[anchor=center,rotate=90] (ROW2/label) at ([xshift=-1.5em]B1-|PIC.west) ROW 2 label;
            node[anchor=center,rotate=90] (ROW3/label) at ([xshift=-1.5em]C1-|PIC.west) ROW 3 label;
            node[anchor=center,rotate=90] (ROW4/label) at ([xshift=-1.5em]D1-|PIC.west) ROW 4 label;

            node[blue,anchor=south] at (A1.north) Description of first pic;

            endtikzpicture
            endfigure

            enddocument


            Explanation of TikZ solution



            I'm trying to minimize your headaches with TikZ here. The key here is two-fold: using a overlays and fitting.



            I still use the tabular environment for laying out the picture. This could be done in a Tikz Picture. But, since I don't know all your potential constraints, I've forgone making the entire figure that way. In particular, I don't know how you want to handle the alignment pictures of unequal height or width.



            Each cell of tabular tabular environment has three things going on:



            • A TikZ mark is created. This is to help us later remember where the picture is.

            • Using the TikZ mark, another TikZ node is created in which the image is going to be placed. This will give us information about where the edges of the picture are that a TikZ mark doesn't provide.

            • I define a command aegraphic to simplify things a bit. And, it makes the code more readable. This command takes three arguments. The first is optional and contains the key values you want to pass along to includegraphics, the second argument is the name of the node in which you'll be placing the graphic, and the third argument is name of the image file.

            Once the table of images is created, I create a PIC node to fit all the nodes of each individual graphic used. Now I can easily determine where the arrows along the top and left of the image should be place. I can also easily place labels adjacent to rows (properly rotated) and above each column.



            The key points of TikZ that I use are the following:



            • Anchoring: this helps us place the elements of the picture relative to each other without know exactly where they are.

            • Rotation: rotation happens around the anchor of the node.

            • The (<node_A>-|<node_B>) syntax: this grabs the y coordinate from node A and the x coordinate of node B. Similarly (<node_A>|-<node_B>) just flips this around.

            • The ([<options>]node-name) syntax: this allows fine tuning such as displacing the arrows along the edges of the image relative to the nodes defined by the table.


            • remember picture,overlay syntax: this is telling TikZ to remember where this picture is being placed, essentially allowing you to place the TikZ picture wherever you would like on the page irrespective of other content.





            share|improve this answer






















            • I like it, but I will wait a few days before marking the solution. Using a table is smart, did not consider that.
              – kabanus
              1 hour ago














            up vote
            1
            down vote













            Part 1: a partial non-TikZ solution



            Here's the start of a solution that does not resort to TikZ. There's a lot more work that needs to be done, but perhaps it sheds some light on what you need.



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[verbose,margin=0.1in]geometry
            graphicspath./images/

            newcommandmyxdownarrow[2]$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%
            newcommandmyxrightarrow[1]rotatebox90$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%

            newsaveboxaepic
            newlengthaelength

            begindocument
            setlengthaelengthdimexpr0.97linewidth%%
            beginlrboxaepic
            setlengthtabcolsep0.5pt%%
            begintabular[t]c@hspace1emcccc
            & label1 & label2 & label3 & label4 \
            rotatebox90$pmbvlabel1$ &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image1.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image2.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image3.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image4.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image5.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image6.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image7.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image8.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image9.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image10.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image11.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image12.pdf\
            rotatebox90$pmbvlabel2$
            &
            includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]image13.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image14.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image15.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image16.pdf
            endtabular
            endlrbox%%

            beginfigure
            hspace2emmyxrightarrowdimexprwdaepic -2.25em\[-0.4cm]%%
            makebox[0pt][l]raisebox-height[0pt][dimexprheight+depth]
            hspace*1emmyxdownarrowdimexprhtaepic+dpaepic-1exrelax%%
            raisebox-height[0pt][dimexprheight+depth]useboxaepic%%
            endfigure

            enddocument


            enter image description here



            Part 2: The Bugaboo of TikZ



            So, I know you said you didn't want to use TikZ. But, unless you have constraints coming from a publisher or advisor..., I feel you can get this done very easily and cleanly using TikZ. So, here is my TikZ version of a solution. I explain what I've done after the code for this solution.



            enter image description here



            Here's the code to produce this



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[showframe,margin=0.1in]geometry
            graphicspath./images/

            usepackagetikz
            usetikzlibrarycalc,fit,arrows.meta
            newlengthaelength
            newboxaepic

            newcommandaegraphic[3] %%
            tikz[remember picture,overlay] node (#2/BL) ;%%
            tikz node[anchor=south west,inner sep=0pt] (#2) at (#2/BL) includegraphics[#1]#3;%%


            begindocument

            setlengthaelengthdimexprlinewidth-3em%%
            beginfigure
            setlengthtabcolsep1.5pt%%
            hspace*3em%%
            begintabular[t]cccc
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]A1image1.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A2image2.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A3image3.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A4image4.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]B1image5.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B2image6.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B3image7.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B4image8.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]C1image9.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C2image10.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C3image11.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C4image12.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]D1image13.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D2image14.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D3image15.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D4image16.pdf
            endtabular%%
            begintikzpicture[remember picture,overlay]
            node[fit=(A1) (A2) (A3) (A4)
            (B1) (B2) (B3) (B4)
            (C1) (C2) (C3) (C4)
            (D1) (D2) (D3) (D4),
            inner sep=0pt,
            ] (PIC) ;

            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([xshift=-1em]PIC.north west) -- ([xshift=-1em]PIC.south west);
            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([yshift=1em]PIC.north west) -- ([yshift=1em]PIC.north east);

            node[anchor=south] (COL1/label) at ([yshift=1em]A1|-PIC.north) Column Label 1;
            node[anchor=south] (COL2/label) at ([yshift=1em]A2|-PIC.north) Column Label 2;
            node[anchor=south] (COL3/label) at ([yshift=1em]A3|-PIC.north) Column Label 3;
            node[anchor=south] (COL4/label) at ([yshift=1em]A4|-PIC.north) Column Label 4;

            node[anchor=center,rotate=90] (ROW1/label) at ([xshift=-1.5em]A1-|PIC.west) ROW 1 label;
            node[anchor=center,rotate=90] (ROW2/label) at ([xshift=-1.5em]B1-|PIC.west) ROW 2 label;
            node[anchor=center,rotate=90] (ROW3/label) at ([xshift=-1.5em]C1-|PIC.west) ROW 3 label;
            node[anchor=center,rotate=90] (ROW4/label) at ([xshift=-1.5em]D1-|PIC.west) ROW 4 label;

            node[blue,anchor=south] at (A1.north) Description of first pic;

            endtikzpicture
            endfigure

            enddocument


            Explanation of TikZ solution



            I'm trying to minimize your headaches with TikZ here. The key here is two-fold: using a overlays and fitting.



            I still use the tabular environment for laying out the picture. This could be done in a Tikz Picture. But, since I don't know all your potential constraints, I've forgone making the entire figure that way. In particular, I don't know how you want to handle the alignment pictures of unequal height or width.



            Each cell of tabular tabular environment has three things going on:



            • A TikZ mark is created. This is to help us later remember where the picture is.

            • Using the TikZ mark, another TikZ node is created in which the image is going to be placed. This will give us information about where the edges of the picture are that a TikZ mark doesn't provide.

            • I define a command aegraphic to simplify things a bit. And, it makes the code more readable. This command takes three arguments. The first is optional and contains the key values you want to pass along to includegraphics, the second argument is the name of the node in which you'll be placing the graphic, and the third argument is name of the image file.

            Once the table of images is created, I create a PIC node to fit all the nodes of each individual graphic used. Now I can easily determine where the arrows along the top and left of the image should be place. I can also easily place labels adjacent to rows (properly rotated) and above each column.



            The key points of TikZ that I use are the following:



            • Anchoring: this helps us place the elements of the picture relative to each other without know exactly where they are.

            • Rotation: rotation happens around the anchor of the node.

            • The (<node_A>-|<node_B>) syntax: this grabs the y coordinate from node A and the x coordinate of node B. Similarly (<node_A>|-<node_B>) just flips this around.

            • The ([<options>]node-name) syntax: this allows fine tuning such as displacing the arrows along the edges of the image relative to the nodes defined by the table.


            • remember picture,overlay syntax: this is telling TikZ to remember where this picture is being placed, essentially allowing you to place the TikZ picture wherever you would like on the page irrespective of other content.





            share|improve this answer






















            • I like it, but I will wait a few days before marking the solution. Using a table is smart, did not consider that.
              – kabanus
              1 hour ago












            up vote
            1
            down vote










            up vote
            1
            down vote









            Part 1: a partial non-TikZ solution



            Here's the start of a solution that does not resort to TikZ. There's a lot more work that needs to be done, but perhaps it sheds some light on what you need.



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[verbose,margin=0.1in]geometry
            graphicspath./images/

            newcommandmyxdownarrow[2]$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%
            newcommandmyxrightarrow[1]rotatebox90$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%

            newsaveboxaepic
            newlengthaelength

            begindocument
            setlengthaelengthdimexpr0.97linewidth%%
            beginlrboxaepic
            setlengthtabcolsep0.5pt%%
            begintabular[t]c@hspace1emcccc
            & label1 & label2 & label3 & label4 \
            rotatebox90$pmbvlabel1$ &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image1.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image2.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image3.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image4.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image5.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image6.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image7.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image8.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image9.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image10.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image11.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image12.pdf\
            rotatebox90$pmbvlabel2$
            &
            includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]image13.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image14.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image15.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image16.pdf
            endtabular
            endlrbox%%

            beginfigure
            hspace2emmyxrightarrowdimexprwdaepic -2.25em\[-0.4cm]%%
            makebox[0pt][l]raisebox-height[0pt][dimexprheight+depth]
            hspace*1emmyxdownarrowdimexprhtaepic+dpaepic-1exrelax%%
            raisebox-height[0pt][dimexprheight+depth]useboxaepic%%
            endfigure

            enddocument


            enter image description here



            Part 2: The Bugaboo of TikZ



            So, I know you said you didn't want to use TikZ. But, unless you have constraints coming from a publisher or advisor..., I feel you can get this done very easily and cleanly using TikZ. So, here is my TikZ version of a solution. I explain what I've done after the code for this solution.



            enter image description here



            Here's the code to produce this



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[showframe,margin=0.1in]geometry
            graphicspath./images/

            usepackagetikz
            usetikzlibrarycalc,fit,arrows.meta
            newlengthaelength
            newboxaepic

            newcommandaegraphic[3] %%
            tikz[remember picture,overlay] node (#2/BL) ;%%
            tikz node[anchor=south west,inner sep=0pt] (#2) at (#2/BL) includegraphics[#1]#3;%%


            begindocument

            setlengthaelengthdimexprlinewidth-3em%%
            beginfigure
            setlengthtabcolsep1.5pt%%
            hspace*3em%%
            begintabular[t]cccc
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]A1image1.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A2image2.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A3image3.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A4image4.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]B1image5.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B2image6.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B3image7.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B4image8.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]C1image9.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C2image10.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C3image11.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C4image12.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]D1image13.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D2image14.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D3image15.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D4image16.pdf
            endtabular%%
            begintikzpicture[remember picture,overlay]
            node[fit=(A1) (A2) (A3) (A4)
            (B1) (B2) (B3) (B4)
            (C1) (C2) (C3) (C4)
            (D1) (D2) (D3) (D4),
            inner sep=0pt,
            ] (PIC) ;

            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([xshift=-1em]PIC.north west) -- ([xshift=-1em]PIC.south west);
            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([yshift=1em]PIC.north west) -- ([yshift=1em]PIC.north east);

            node[anchor=south] (COL1/label) at ([yshift=1em]A1|-PIC.north) Column Label 1;
            node[anchor=south] (COL2/label) at ([yshift=1em]A2|-PIC.north) Column Label 2;
            node[anchor=south] (COL3/label) at ([yshift=1em]A3|-PIC.north) Column Label 3;
            node[anchor=south] (COL4/label) at ([yshift=1em]A4|-PIC.north) Column Label 4;

            node[anchor=center,rotate=90] (ROW1/label) at ([xshift=-1.5em]A1-|PIC.west) ROW 1 label;
            node[anchor=center,rotate=90] (ROW2/label) at ([xshift=-1.5em]B1-|PIC.west) ROW 2 label;
            node[anchor=center,rotate=90] (ROW3/label) at ([xshift=-1.5em]C1-|PIC.west) ROW 3 label;
            node[anchor=center,rotate=90] (ROW4/label) at ([xshift=-1.5em]D1-|PIC.west) ROW 4 label;

            node[blue,anchor=south] at (A1.north) Description of first pic;

            endtikzpicture
            endfigure

            enddocument


            Explanation of TikZ solution



            I'm trying to minimize your headaches with TikZ here. The key here is two-fold: using a overlays and fitting.



            I still use the tabular environment for laying out the picture. This could be done in a Tikz Picture. But, since I don't know all your potential constraints, I've forgone making the entire figure that way. In particular, I don't know how you want to handle the alignment pictures of unequal height or width.



            Each cell of tabular tabular environment has three things going on:



            • A TikZ mark is created. This is to help us later remember where the picture is.

            • Using the TikZ mark, another TikZ node is created in which the image is going to be placed. This will give us information about where the edges of the picture are that a TikZ mark doesn't provide.

            • I define a command aegraphic to simplify things a bit. And, it makes the code more readable. This command takes three arguments. The first is optional and contains the key values you want to pass along to includegraphics, the second argument is the name of the node in which you'll be placing the graphic, and the third argument is name of the image file.

            Once the table of images is created, I create a PIC node to fit all the nodes of each individual graphic used. Now I can easily determine where the arrows along the top and left of the image should be place. I can also easily place labels adjacent to rows (properly rotated) and above each column.



            The key points of TikZ that I use are the following:



            • Anchoring: this helps us place the elements of the picture relative to each other without know exactly where they are.

            • Rotation: rotation happens around the anchor of the node.

            • The (<node_A>-|<node_B>) syntax: this grabs the y coordinate from node A and the x coordinate of node B. Similarly (<node_A>|-<node_B>) just flips this around.

            • The ([<options>]node-name) syntax: this allows fine tuning such as displacing the arrows along the edges of the image relative to the nodes defined by the table.


            • remember picture,overlay syntax: this is telling TikZ to remember where this picture is being placed, essentially allowing you to place the TikZ picture wherever you would like on the page irrespective of other content.





            share|improve this answer














            Part 1: a partial non-TikZ solution



            Here's the start of a solution that does not resort to TikZ. There's a lot more work that needs to be done, but perhaps it sheds some light on what you need.



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[verbose,margin=0.1in]geometry
            graphicspath./images/

            newcommandmyxdownarrow[2]$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%
            newcommandmyxrightarrow[1]rotatebox90$pmbleftdownarrowrule[-0.5dimexpr#1]0pt#1right.$%%

            newsaveboxaepic
            newlengthaelength

            begindocument
            setlengthaelengthdimexpr0.97linewidth%%
            beginlrboxaepic
            setlengthtabcolsep0.5pt%%
            begintabular[t]c@hspace1emcccc
            & label1 & label2 & label3 & label4 \
            rotatebox90$pmbvlabel1$ &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image1.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image2.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image3.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image4.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image5.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image6.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image7.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image8.pdf\
            &
            includegraphics[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]image9.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image10.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image11.pdf &
            includegraphics[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]image12.pdf\
            rotatebox90$pmbvlabel2$
            &
            includegraphics[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]image13.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image14.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image15.pdf &
            includegraphics[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]image16.pdf
            endtabular
            endlrbox%%

            beginfigure
            hspace2emmyxrightarrowdimexprwdaepic -2.25em\[-0.4cm]%%
            makebox[0pt][l]raisebox-height[0pt][dimexprheight+depth]
            hspace*1emmyxdownarrowdimexprhtaepic+dpaepic-1exrelax%%
            raisebox-height[0pt][dimexprheight+depth]useboxaepic%%
            endfigure

            enddocument


            enter image description here



            Part 2: The Bugaboo of TikZ



            So, I know you said you didn't want to use TikZ. But, unless you have constraints coming from a publisher or advisor..., I feel you can get this done very easily and cleanly using TikZ. So, here is my TikZ version of a solution. I explain what I've done after the code for this solution.



            enter image description here



            Here's the code to produce this



            documentclassarticle
            usepackage[draft]graphicx
            usepackageamsmath
            usepackage[showframe,margin=0.1in]geometry
            graphicspath./images/

            usepackagetikz
            usetikzlibrarycalc,fit,arrows.meta
            newlengthaelength
            newboxaepic

            newcommandaegraphic[3] %%
            tikz[remember picture,overlay] node (#2/BL) ;%%
            tikz node[anchor=south west,inner sep=0pt] (#2) at (#2/BL) includegraphics[#1]#3;%%


            begindocument

            setlengthaelengthdimexprlinewidth-3em%%
            beginfigure
            setlengthtabcolsep1.5pt%%
            hspace*3em%%
            begintabular[t]cccc
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]A1image1.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A2image2.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A3image3.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]A4image4.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]B1image5.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B2image6.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B3image7.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]B4image8.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 1.1cm 0 0,clip,width=0.249aelength]C1image9.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C2image10.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C3image11.pdf &
            aegraphic[trim=1.1cm 1.1cm 0 0,clip,width=0.230aelength]C4image12.pdf\
            %% ------------------------------------------------------------------------------------
            aegraphic[trim=0.0cm 0.0cm 0 0,clip,width=0.249aelength]D1image13.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D2image14.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D3image15.pdf &
            aegraphic[trim=1.1cm 0.0cm 0 0,clip,width=0.230aelength]D4image16.pdf
            endtabular%%
            begintikzpicture[remember picture,overlay]
            node[fit=(A1) (A2) (A3) (A4)
            (B1) (B2) (B3) (B4)
            (C1) (C2) (C3) (C4)
            (D1) (D2) (D3) (D4),
            inner sep=0pt,
            ] (PIC) ;

            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([xshift=-1em]PIC.north west) -- ([xshift=-1em]PIC.south west);
            draw[line width=1pt,arrows=-Stealth[length=4mm]] ([yshift=1em]PIC.north west) -- ([yshift=1em]PIC.north east);

            node[anchor=south] (COL1/label) at ([yshift=1em]A1|-PIC.north) Column Label 1;
            node[anchor=south] (COL2/label) at ([yshift=1em]A2|-PIC.north) Column Label 2;
            node[anchor=south] (COL3/label) at ([yshift=1em]A3|-PIC.north) Column Label 3;
            node[anchor=south] (COL4/label) at ([yshift=1em]A4|-PIC.north) Column Label 4;

            node[anchor=center,rotate=90] (ROW1/label) at ([xshift=-1.5em]A1-|PIC.west) ROW 1 label;
            node[anchor=center,rotate=90] (ROW2/label) at ([xshift=-1.5em]B1-|PIC.west) ROW 2 label;
            node[anchor=center,rotate=90] (ROW3/label) at ([xshift=-1.5em]C1-|PIC.west) ROW 3 label;
            node[anchor=center,rotate=90] (ROW4/label) at ([xshift=-1.5em]D1-|PIC.west) ROW 4 label;

            node[blue,anchor=south] at (A1.north) Description of first pic;

            endtikzpicture
            endfigure

            enddocument


            Explanation of TikZ solution



            I'm trying to minimize your headaches with TikZ here. The key here is two-fold: using a overlays and fitting.



            I still use the tabular environment for laying out the picture. This could be done in a Tikz Picture. But, since I don't know all your potential constraints, I've forgone making the entire figure that way. In particular, I don't know how you want to handle the alignment pictures of unequal height or width.



            Each cell of tabular tabular environment has three things going on:



            • A TikZ mark is created. This is to help us later remember where the picture is.

            • Using the TikZ mark, another TikZ node is created in which the image is going to be placed. This will give us information about where the edges of the picture are that a TikZ mark doesn't provide.

            • I define a command aegraphic to simplify things a bit. And, it makes the code more readable. This command takes three arguments. The first is optional and contains the key values you want to pass along to includegraphics, the second argument is the name of the node in which you'll be placing the graphic, and the third argument is name of the image file.

            Once the table of images is created, I create a PIC node to fit all the nodes of each individual graphic used. Now I can easily determine where the arrows along the top and left of the image should be place. I can also easily place labels adjacent to rows (properly rotated) and above each column.



            The key points of TikZ that I use are the following:



            • Anchoring: this helps us place the elements of the picture relative to each other without know exactly where they are.

            • Rotation: rotation happens around the anchor of the node.

            • The (<node_A>-|<node_B>) syntax: this grabs the y coordinate from node A and the x coordinate of node B. Similarly (<node_A>|-<node_B>) just flips this around.

            • The ([<options>]node-name) syntax: this allows fine tuning such as displacing the arrows along the edges of the image relative to the nodes defined by the table.


            • remember picture,overlay syntax: this is telling TikZ to remember where this picture is being placed, essentially allowing you to place the TikZ picture wherever you would like on the page irrespective of other content.






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 17 mins ago

























            answered 1 hour ago









            A.Ellett

            34.7k1063162




            34.7k1063162











            • I like it, but I will wait a few days before marking the solution. Using a table is smart, did not consider that.
              – kabanus
              1 hour ago
















            • I like it, but I will wait a few days before marking the solution. Using a table is smart, did not consider that.
              – kabanus
              1 hour ago















            I like it, but I will wait a few days before marking the solution. Using a table is smart, did not consider that.
            – kabanus
            1 hour ago




            I like it, but I will wait a few days before marking the solution. Using a table is smart, did not consider that.
            – kabanus
            1 hour ago

















             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f453092%2farrows-around-figure-no-tikz%23new-answer', 'question_page');

            );

            Post as a guest













































































            Comments

            Popular posts from this blog

            Long meetings (6-7 hours a day): Being “babysat” by supervisor

            Is the Concept of Multiple Fantasy Races Scientifically Flawed? [closed]

            Confectionery