1

I'd like to create a Latex template similar to the one on the picture. Basically it's a set of boxes with different fields plus the big box on the bottom with a graphic. I've been analysing several possibilities, but I'm unsure as to the simplest approach would be.

I'm thinking of using minipages and frameboxes, but I'm unsure as to whether there is another (simpler) approach...

Any ideas?

Thanks in advance:

Pedro

enter image description here

  • 5
    Should the boxes be fillable with text, as in a form? – user36296 Dec 31 '18 at 18:52
  • 5
    tcbraster and a bunch of tcolorboxes, but really, it's a lot of work with that... – user31729 Dec 31 '18 at 18:53
  • 2
    In the past I have used the picture environment for this sort of thing. – Peter Wilson Dec 31 '18 at 18:59
  • I remember reading a TUG article about those kind of medical documents issued some years age. It would be worth looking for it. – sztruks Dec 31 '18 at 19:47
  • 5
    I would do the whole thing with TikZ, using empty rectangle nodes and placing the text and shaded spaces relative to the anchor points. – John Kormylo Dec 31 '18 at 20:39
4

Following the advice of @John Kormylo, I've started looking at TikZ. In the meanwhile, I've found an utility to convert from SVG to TikZ (https://github.com/kjellmf/svg2tikz), which saved me a lot of time, since I already had an SVG template.

I believe now it's just a matter of fine tuning. While this is still WIP, I've managed to create an usable template with all the fields I need using the following code:

\documentclass{article}
\usepackage[a4paper, margin=1cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[portuguese]{babel}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{helvet}
\usepackage{tikz}
\newcommand{\myfont}{\sffamily\tiny}
\tikzset{every picture/.style={/utils/exec={\myfont}}}

\begin{document}
\definecolor{ceaeaea}{RGB}{234,234,234}


\begin{tikzpicture}[y=0.80pt, x=0.80pt, yscale=-3.40000, xscale=3.40000, inner sep=0pt, outer sep=0pt]
\path[draw=black,miter limit=10.00,nonzero rule,line width=0.207pt,rounded
corners=0.0000cm] (31.2797,43.0447) rectangle (178.7203,252.4853);
\path[fill=black] (0.0000,0.0000) node[above right] (flowRoot4524) {};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(294.3900,96.4443) node[above right] (text4770-2) {};
\path[fill=black,line width=0.212pt] (295.5916,96.4856) node[above right]
(text1077) {};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(143.3438,50.8601) node[above right] (text4733) {Data};
\path[draw=black,miter limit=4.00,line width=0.400pt] (141.6885,46.9393) --
(178.7048,46.9393) -- (178.7048,71.5803) -- (141.6885,71.5803) -- cycle;
\path[draw=black,line join=miter,line cap=butt,miter limit=4.00,even odd
rule,line width=0.400pt] (141.8046,59.1590) -- (178.7048,59.1590);
\path[draw=black,line join=miter,line cap=butt,miter limit=4.00,even odd
rule,line width=0.400pt] (165.3336,59.1590) -- (165.3336,71.5803);
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(143.4002,62.6282) node[above right] (text4758) {P (m)};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(166.6337,62.2359) node[above right] (text4762) {TM (min)};
\path[draw=black,miter limit=4.00,line width=0.400pt] (46.1990,46.9393) --
(64.9426,46.9393) -- (64.9426,54.9639) -- (46.1990,54.9639) -- cycle;
\path[draw=black,miter limit=4.00,line width=0.400pt] (66.0925,46.9393) --
(140.4420,46.9393) -- (140.4420,54.9639) -- (66.0925,54.9639) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(67.8957,50.1904) node[above right] (text4770) {Local};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(47.8226,50.5990) node[above right] (text4774) {Nº};
\path[draw=black,miter limit=4.00,line width=0.400pt] (46.2398,112.2409) --
(178.7500,112.2409) -- (178.7500,162.1446) -- (46.2398,162.1446) -- cycle;
\path[draw=black,miter limit=4.00,line width=0.400pt] (46.2224,56.1200) --
(140.4864,56.1200) -- (140.4864,65.8242) -- (46.2224,65.8242) -- cycle;
\path[draw=black,miter limit=4.00,line width=0.400pt] (141.6497,88.2279) --
(178.7500,88.2279) -- (178.7500,111.1826) -- (141.6497,111.1826) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(143.4002,92.2893) node[above right] (text4770-1) {Rubrica(s)};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(47.6782,59.4158) node[above right] (text4770-9) {Companheiro(s)};
\path[draw=black,miter limit=4.00,line width=0.400pt] (46.2243,67.2150) --
(81.6619,67.2150) -- (81.6619,77.8195) -- (46.2243,77.8195) -- cycle;
\path[draw=black,miter limit=4.00,line width=0.400pt] (83.1621,67.1952) --
(140.4809,67.1952) -- (140.4809,77.9541) -- (83.1621,77.9541) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(47.5653,71.0898) node[above right] (text4770-5) {Hora de entrada};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(47.5653,116.3007) node[above right] (text4770-0) {Notas};
\path[draw=black,miter limit=4.00,line width=0.400pt] (46.2398,163.5650) --
(178.7500,163.5650) -- (178.7500,250.0813) -- (46.0100,250.0813) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(84.6744,70.9296) node[above right] (text4770-0-8) {Tipo};
\path[draw=black,miter limit=4.00,line width=0.400pt] (46.2062,79.0382) --
(81.6900,79.0382) -- (81.6900,96.5244) -- (46.2062,96.5244) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(47.2763,81.9121) node[above right] (text4770-0-8-6) {Condições};
\path[draw=black,miter limit=4.00,line width=0.400pt] (83.0913,79.1084) --
(140.4102,79.1084) -- (140.4102,102.4919) -- (83.0913,102.4919) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(83.9829,82.4187) node[above right] (text4770-1-4) {Equipamento};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(83.9731,85.9818) node[above right] (text4770-1-4-4) {Fato};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(47.9841,101.0407) node[above right] (text4770-1-4-9) {Gás/Gases usado(s)};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(84.6947,96.4994) node[above right] (text4770-1-4-4-8) {Lastro (kg)};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(112.0161,82.5229) node[above right] (text4770-1-4-4-85) {Garrafa(s)};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(83.8753,107.2107) node[above right] (text4770-1-4-4-2) {Classificação};
 \path[fill=ceaeaea,miter limit=4.00,line width=0.237pt] (52.0351,48.3821) --
(63.9225,48.3821) -- (63.9225,53.4974) -- (52.0351,53.4974) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (75.7594,48.0878) --
(138.9287,48.0878) -- (138.9287,53.7918) -- (75.7594,53.7918) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (151.9595,48.0878) --
(177.3603,48.0878) -- (177.3603,57.9656) -- (151.9595,57.9656) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (151.9595,60.7878) --
(163.2484,60.7878) -- (163.2484,70.6656) -- (151.9595,70.6656) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (167.4817,63.6100) --
(177.3603,63.6100) -- (177.3603,70.6656) -- (167.4817,70.6656) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (47.6048,60.2613) --
(138.9287,60.2613) -- (138.9287,64.8152) -- (47.6048,64.8152) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (47.6048,72.3524) --
(79.9928,72.3524) -- (79.9928,76.5857) -- (47.6048,76.5857) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (91.2817,69.0384) --
(138.9287,69.0384) -- (138.9287,76.7006) -- (91.2817,76.7006) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (47.6048,89.4257) --
(56.7819,89.4257) -- (56.7819,95.7385) -- (47.6048,95.7385) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (57.8906,89.4257) --
(66.6754,89.4257) -- (66.6754,95.7385) -- (57.8906,95.7385) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (84.2261,86.8029) --
(111.0589,86.8029) -- (111.0589,93.2491) -- (84.2261,93.2491) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt,rounded corners=0.0000cm]
(96.0106,94.9564) rectangle (110.8965,100.6008);
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (112.4484,83.4252) --
(138.9287,83.4252) -- (138.9287,100.6068) -- (112.4484,100.6068) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (47.6048,117.2322) --
(177.3603,117.2322) -- (177.3603,160.9767) -- (47.6048,160.9767) -- cycle;
 \path[draw=black,miter limit=4.00,line width=0.400pt] (46.1464,97.8147) --
(81.6854,97.8147) -- (81.6854,111.1044) -- (46.1464,111.1044) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (47.6048,102.0179) --
(79.5378,102.0179) -- (79.5378,110.2253) -- (47.6048,110.2253) -- cycle;
 \path[draw=black,miter limit=4.00,line width=0.400pt] (83.0350,103.6984) --
(140.4338,103.6984) -- (140.4338,111.1378) -- (83.0350,111.1378) -- cycle;
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (100.8473,104.9735) --
(138.9287,104.9735) -- (138.9287,109.7629) -- (100.8473,109.7629) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(53.0323,51.8397) node[above right] (text4770-3) {\ssrfnumber};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(52.2853,63.9487) node[above right] (text4770-53) {\ssrfbuddy};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(80.0001,51.5671) node[above right] (text4770-6) {\ssrfplace};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(58.6353,75.3258) node[above right] (text4770-12) {Local};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(98.3228,74.0029) node[above right] (text4770-09) {\ssrftype};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(48.3827,92.2260) node[above right] (text4770-60) {\ssrfwatertemp};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(58.5408,92.2260) node[above right] (text4770-61) {\ssrfairtemp};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(89.0624,89.8779) node[below right, text width=2cm] (text4770-7) {\ssrfsuit};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(96.7068,98.3194) node[above right] (text4770-02) {\ssrfweightaamt};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(48.0519,104.4300) node[above right] (text4770-59) {\ssrfcylagasname};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(112.8749,86.1737) node[above right] (text4770-36)
{\ssrfcyladescription};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(102.4768,108.0755) node[above right] (text4770-19) {\ssrfrating};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(48.0519,121.6278) node[above right, text width=12cm] (text4770-361) {\ssrfcomment};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(156.5311,54.1591) node[above right] (text4770-63) {\ssrfdate};
\path[fill=black,line join=miter,line cap=butt,line width=0.612pt]
(152.6864,64.0571) node[above right] (text4770-615){\ssrfmaximumdepth};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(168.4374,67.3883) node[above right] (text4770-76) {\ssrftime};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(143.4002,74.6774) node[above right] (text4770-1-4-4-0) {Pmédia (m)};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(163.1792,74.8197) node[above right] (text4770-1-4-4-1) {SAC (l/min)};
 \path[draw=black,miter limit=4.00,line width=0.400pt] (141.6885,71.5803) --
(178.7048,71.5803) -- (178.7048,87.3338) -- (141.6885,87.3338) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (143.2308,76.1474) --
(157.0478,76.1474) -- (157.0478,85.9424) -- (143.2308,85.9424) -- cycle;
 \path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (162.4118,76.1474) --
(177.3603,76.1474) -- (177.3603,85.9424) -- (162.4118,85.9424) -- cycle;
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(143.7744,81.7278) node[above right] (text4770-93) {\ssrfmeandepth};
\path[fill=black,line width=0.212pt] (57.9753,174.6333) node[inner sep=0pt]
(plot) at (111,207) {\ssrfplot};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(112.8749,89.0695) node[above right] (text4770-36-4)
{\ssrfcylbdescription};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(48.2545,107.7221) node[above right] (text4770-59-3)
{\ssrfcylbgasname};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(112.8749,91.9653) node[above right] (text4770-36-4-7)
{\ssrfcylcdescription};
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(112.8749,94.8611) node[above right] (text4770-36-4-6)
{\ssrfcylddescription};
 \path[fill=black,line width=0.212pt] (370.9979,63.4127) node[above right]
(text1153) {\ssrfmeandepth};
 \path[fill=black,line width=0.212pt] (382.9041,71.3502) node[above right]
(text1157) {\ssrfviz};
 \path[fill=black,line width=0.212pt] (378.9354,77.9648) node[above right]
(text1161) {\ssrfcomputer};
 \path[fill=black,line width=0.212pt] (380.2583,88.5481) node[above right]
(text1165) {\ssrfgasuse};
 \path[fill=black,line width=0.212pt] (380.2583,96.4856) node[above right]
(text1169) {\ssrfsac};
 \begin{scope}[shift={(1.67314,1.98097)}]
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
  (47.8009,86.8125) node[above right] (text4770-0-8-7) {Água};
 \end{scope}
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(60.9135,88.8432) node[above right] (text4770-0-8-7-8) {Ar};
\begin{scope}[shift={(-3.13355,0.88681)}]
 \path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
  (50.4592,84.4211) node[above right] (text4770-0-8-7-9) {Temperatura (   )};
 \begin{scope}[cm={{0.67131,0.0,0.0,0.67131,(40.73125,27.94586)}}]
  \path[fill=black,line width=0.212pt] (34.6448,84.3166) node[above right]
    (text2902-7) {C};
  \path[fill=black,line width=0.212pt] (33.8568,82.9860) node[above right]
    (text2924-9) {o};
\end{scope}
\end{scope}
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(68.5767,85.5143) node[above right] (text4770-0-8-7-9-0) {Visibilidade};
\path[fill=ceaeaea,miter limit=4.00,line width=0.240pt] (69.9744,89.4257) --
(78.7592,89.4257) -- (78.7592,95.7385) -- (69.9744,95.7385) -- cycle;
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(70.8431,92.3657) node[above right] (text4770-61-0) {\ssrfviz};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(165.9193,81.7164) node[above right] (text4770-93-3) {\ssrfsac};
\path[fill=black,line join=miter,line cap=butt,line width=0.800pt]
(112.8749,97.7568) node[above right] (text4770-36-4-6-5)
{\ssrfcyledescription};

\end{tikzpicture}
\end{document}

Thank you all for the hints.

  • 2
    The problem is that the convert is not smart, produces a lot of complicated coordinates. – Sigur Jan 11 at 0:50
4

This is the best I manage to do with tcolorbox's posterlibrary. The grey box was not included and some tricks with tables.

I am not an expert with tcolorbox so any suggestions/corrections are welcome.

Other questions you might want to have a look: this boxes, this form and this other form.

poster form

\documentclass{article}
\usepackage[many,poster]{tcolorbox}
\usepackage[a4paper, margin=1cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[portuguese]{babel}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{helvet}
\renewcommand{\rmdefault}{\sfdefault}
%
\pagestyle{empty}
\begin{document}

\begin{tcbposter}[
poster = {,spacing=1.5mm,columns=8,rows=25} , %showframe},
boxes  = {sharp corners,colback=white,left=0mm,right=0mm},
]
\posterbox{name=Numero,column=1,span=1.5,row=1,}{ \#}
\posterbox{name=Local,column=2,span=4.5,row=1,,xshift=11.9mm}{ Local}
\posterbox{name=Data,column=7,span=2,row=1,rowspan=1.5}{ Data}
%
\begin{posterboxenv}[sidebyside,segmentation style={solid}]{name=PTM,column=7,span=2,below=Data,rowspan=1.72,yshift=2.5mm,} 
P(m)
\tcblower
TM(min)
\end{posterboxenv}
\posterbox{name=Rubrica,column=7,span=2,row=4,rowspan=3,}{ Rubrica(s)}
\begin{posterboxenv}[sidebyside,segmentation hidden]{name=OTU,column=7,span=2,below=Rubrica,rowspan=3,}
OTU's
\tcblower
CNS
\end{posterboxenv}
%
%
%
\posterbox{name=Companheiro,column=1,span=6,row=2}{ Companheiro(s)}
%
\posterbox{name=Hora,column=1,span=2,row=3,rowspan=2}{ Hora de entrada}
\posterbox{name=Tipo,column=3,span=4,row=3,rowspan=2}{ Tipo}
%
\begin{posterboxenv}[sidebyside,segmentation hidden,title=Condições,titlerule=0mm,colbacktitle=white,coltitle=black]{name=Condicoes,column=1,span=2,row=5,rowspan=3}
Temp.\ água
\tcblower
Temp.\ ar
\end{posterboxenv}
%
\begin{posterboxenv}[sidebyside,segmentation hidden,title=Equipamento,titlerule=0mm,colbacktitle=white,coltitle=black]{name=Equipamento,column=3,span=4,row=5,rowspan=4}
\begin{tabular}{l}
Fato \\ 
\\
\\
\\
Lastro (kg) \\ 
\end{tabular} 
\tcblower
\begin{tabular}{l}
Garrata(s) \\ 
\\
\\
\\
 \\ 
 \end{tabular}
\end{posterboxenv}
%
\posterbox{name=Gas,column=1,span=2,row=8,rowspan=2}{ Gás/Gases usado(s)}
\posterbox{name=Classificacao,column=3,span=4,row=9,rowspan=1}{ Classificação}
%
\posterbox{name=Notas,column=1,span=8,row=10,rowspan=6}{ Notas}
\posterbox{name=Perfil,column=1,span=8,row=16,rowspan=10}{ Perfil

\bigskip
\includegraphics[width=\tcbtextwidth,height=9cm]{example-image}
}
\end{tcbposter}
\end{document}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.