Para um relatório que estou escrevendo, tenho um modelo do MS Word para uma página que precisa ser incluída. A página fica assim (print screen do Word):
No entanto, existem algumas coisas que me fazem não querer usar este modelo em sua forma atual, mas sim reescrevê-lo em LaTeX:
- Esta página está em Word, enquanto o restante do meu relatório está em LaTeX. Conseqüentemente, os estilos serão diferentes, o que inclui fontes e larguras de linha, por exemplo.
- O Word converte imagens vetoriais armazenadas em formato PDF em imagens raster de baixa resolução quando você as inclui (e sim, ainda é rasterizado depois de impresso como um arquivo PDF).
De qualquer forma, chega de argumentar sobre o uso do LaTeX e vamos à pergunta:Como faço para conseguir esse tipo de layout usando LaTeX? Tudo o que preciso saber no momento é como criar esse tipo de caixas que existem lado a lado neste padrão e como ajustar o texto corretamente dentro das caixas.
Editar:Seria bom se as dimensões das caixas fossem independentes do conteúdo delas. Dessa forma, o layout permaneceria o mesmo para diferentes pessoas que usassem o mesmo modelo LaTeX. Meu departamento na universidade talvez vá usá-lo como uma alternativa oficial ao modelo do Word.
Responder1
Eu faço isso em meus relatórios. Primeiro você precisa da configuração em seu arquivo de classe ou estilo. No meu caso, é a nossa classe de relatório e contém as seguintes definições para criar um formulário governamental SF-298:
\newenvironment{createSFtwoNINEeight}{
\clearpage
\begin{singlespace}
\begin{picture}(612,650)(70,82)
\includegraphics{SF298}
\footnotesize
\@SFitemONE{\@pubdate}
\@SFitemTWO{Final}
\@SFitemEIGHT{\@arlrptno}
\@SFitemTWELVE{\@distribution}
\def\SFitemSIXTEENaVALUE{Unclassified}
\def\SFitemSIXTEENbVALUE{Unclassified}
\def\SFitemSIXTEENcVALUE{Unclassified}
}{
\put(-564,100){\parbox[c]{0.8in}{\centering
\SFitemSIXTEENaVALUE}}
\put(-493,100){\parbox[c]{0.8in}{\centering
\SFitemSIXTEENbVALUE}}
\put(-422,100){\parbox[c]{0.8in}{\centering
\SFitemSIXTEENcVALUE}}
\normalsize
\end{picture}
\end{singlespace}
}
\newcommand\@SFitemONE[1]{\put(-564,662){#1}}
\newcommand\@SFitemTWO[1]{\put(-424,662){#1}}
\newcommand\SFitemTHREE[1]{\put(-217,662){#1}}
\newcommand\SFitemFOUR[1]{\put(-564,636){\parbox[t]{4.65in}{\raggedright#1}}}
\newcommand\SFitemFIVEa[1]{\put(-217,636){#1}}
\newcommand\SFitemFIVEd[1]{\put(-217,569){#1}}
\newcommand\SFitemSIX[1]{\put(-564,569){\parbox[t]{4.65in}{#1}}}
\newcommand\SFitemSEVEN[1]{\put(-564,485){\parbox[c]{4.65in}{\raggedright#1}}}
\newcommand\@SFitemEIGHT[1]{\put(-217,485){#1}}
\newcommand\SFitemNINE[1]{\put(-564,432){\parbox[c]{4.65in}{\raggedright#1}}}
\newcommand\SFitemTEN[1]{\put(-217,445){#1}}
\newcommand\SFitemELEVEN[1]{\put(-217,412){#1}}
\newcommand\@SFitemTWELVE[1]
{\put(-564,381){\parbox[c]{7.15in}{\setstretch{0.9}#1}}}
\newcommand\SFitemTHIRTEEN[1]{\put(-564,350){\parbox[t]{7.1in}{\raggedright#1}}}
\newcommand\SFitemFOURTEEN[1]{\put(-564,310){\parbox[t]{7.1in}{\raggedright#1}}}
\newcommand\SFitemFIFTEEN[1]{\put(-564,148){\parbox[b]{7.1in}{\raggedright#1}}}
\newcommand\SFitemSIXTEENa[1]{\def\SFitemSIXTEENaVALUE{#1}}
\newcommand\SFitemSIXTEENb[1]{\def\SFitemSIXTEENbVALUE{#1}}
\newcommand\SFitemSIXTEENc[1]{\def\SFitemSIXTEENcVALUE{#1}}
\newcommand\SFitemSEVENTEEN[1]{
\put(-352,108){\parbox[c]{0.8in}{\centering#1}}
}
\newcommand\SFitemEIGHTEEN[1]{\put(-285,108){\parbox[c]{0.8in}{\centering#1}}}
\newcommand\SFitemNINETEENa[1]{\put(-217,124){#1}}
\newcommand\SFitemNINETEENb[1]{\put(-217,100){#1}}
Como você pode ver, ele usa o ambiente de imagem nativo do LaTeX, no qual sobrepõe seu texto sobre um formulário em branco (o formulário em branco é importado como um gráfico). Em seu documento, você precisa recorrer ao meio ambiente para fazer o desenho:
%% OPTION I: CREATE YOUR OWN SF298 in LaTeX:
\begin{createSFtwoNINEeight}
% SFitemONE AUTOMATICALLY FILLED IN (\pubdate)
% SFitemTWO AUTOMATICALLY FILLED IN (Final)
\SFitemTHREE{January 2011-October 2011}
\SFitemFOUR{Frontiers in Anisotropic Shock-Wave Modeling}
\SFitemFIVEd{AH80}
\SFitemSIX{Alexander A. Lukyanov\\Steven B. Segletes}
\SFitemSEVEN{Abingdon [EDITED OUT]}
% SFitemEIGHT AUTOMATICALLY FILLED IN (\arlrptno)
% \SFitemNINE{As needed...}
% SFitemTWELVE AUTOMATICALLY FILLED IN (\distribution)
\SFitemTHIRTEEN{[EDITED OUT].}
\SFitemFOURTEEN{
Studies of anisotropic materials and the discovery of various novel and
unexpected phenomena under shock loading has contributed significantly
to our understanding of the behavior of condensed matter. The variety of
experimental studies for isotropic materials displays systematic
patterns, giving basic insights into the underlying physics of
anisotropic shock-wave modeling. There are many similarities and
significant differences in the phenomena observed for isotropic and
anisotropic materials under shock-wave loading. Despite this, the
anisotropic constitutive equations must represent, mathematically and
physically, the generalization of the conventional constitutive equations for
isotropic material and reduce to the conventional constitutive equations
in the limit of isotropy. This report presents the current state of the
art in the experimental and theoretical developments of this fascinating
field.
}
\SFitemFIFTEEN{anisotropic material, anisotropic
plasticity, shock waves, equation of state, stress decomposition}
% \SFitemSIXTEENa defaults to UNCLASSSIFIED
% \SFitemSIXTEENb defaults to UNCLASSSIFIED
% \SFitemSIXTEENc defaults to UNCLASSSIFIED
\SFitemSEVENTEEN{UU}
\SFitemEIGHTEEN{72}% = FRONT MATTER PP. + REPORT PP. + 2
\SFitemNINETEENa{Steven B. Segletes}
\SFitemNINETEENb{[EDITED OUT]}
\end{createSFtwoNINEeight}
O resultado líquido é
Em resposta à solicitação de um exemplo independente, peguei a imagem do questionador no topo desta página e salvei-a (como form.png). Eu então escrevi este trecho abreviado
\documentclass{article}
\usepackage{graphicx}
\usepackage{setspace}
\newenvironment{myForm}{
\clearpage
\begin{singlespace}
\begin{picture}(600,500)(70,82)
\includegraphics[height=9in]{form}
\footnotesize
\SFitemONE{\pubdate}
\SFitemEIGHT{\rptno}
}{
\normalsize
\end{picture}
\end{singlespace}
}
\newcommand\SFitemONE[1]{\put(-138,585){#1}}
\newcommand\SFitemEIGHT[1]{\put(-410,500){\textbf{#1}}}
\newcommand\SFitemSEVENTEEN[1]{
\put(-400,270){\parbox[c]{4.8in}{#1}}
}
\begin{document}
\def\pubdate{\today}
\def\rptno{xyz-123}
\begin{myForm}
\SFitemSEVENTEEN{This is the extended text This is the extended text
This is the extended text This is the extended text This is the
extended text This is the extended text This is the extended text }
\end{myForm}
\end{document}
O resultado é o seguinte, onde um número de relatório, uma data e uma seção de texto estendida foram adicionados ao formulário do usuário. Neste exemplo, utilizo tanto o ambiente para adicionar dados ( \SFitemSEVENTEEN
) como também uso dados previamente definidos ( \pubdate
e \rptno
) dentro do formulário
Responder2
Apenas algumas dicas,
- Use
minipages
e use uma interface de valor-chave para inserir os dados. Inserir dados quando você tem 10 minutos para obter um formulário para um relatório atrasado que se perde em uma avalanche de comandos LaTeX é confuso e propenso a erros. Penseminipages
comodivs
se você estivesse familiarizado comhtml
o mesmo conceito. - Conheça o seu
minipages
. Você terá que usar a forma completa dos comandos, ou seja, atendendo ao alinhamento externo e interno, bem como especificando a altura da caixa. - Use
fbox
durante a prototipagem, mas você pode querer usar regras na versão final. - Reserve pelo menos 1 a 2 horas para obter um formulário perfeito. TikZ também pode ser seu amigo, se você estiver familiarizado com ele. Caso alguém peça cantos arredondados.
Eu normalmente uso PGF
para chaves. Aqui está um MWE
\documentclass{article}
\usepackage{pgf}
\newcommand\setform{\pgfqkeys{/form }}
\setform{field1/.store in=\fieldi,
field2/.store in=\fieldii,
}
\begin{document}
\newcommand\myform{%
\fboxrule=0.4pt
\fbox{\begin{minipage}{\textwidth}
\fbox{\begin{minipage}[t][3cm][t]{0.25\textwidth}
\textbf{Name} \fieldi
\end{minipage}}%
\fbox{\begin{minipage}[t][3cm][t]{0.4\textwidth}
\textbf{Subject} \fieldii
\end{minipage}}
\fbox{\begin{minipage}[t][3cm][t]{0.25\textwidth}
test
\end{minipage}}
\end{minipage}}
}
\setform{field1 = G. Wales,
field2 = Mathematics}
\myform
\end{document}
Responder3
Use table
ambiente com combinação de minipage
ambiente em colunas e você conseguirá. Você precisa considerar multicolumn
pacotes multirow
para fazer esse formato acontecer.
Outra solução é verificarbaposterpara pôsteres de LaTeX. É muito otimizado para criar layouts tão estranhos. Crie um PDF com ele e inclua-o no seu documento LaTeX.
Responder4
Usar elementos flutuantes ou minipáginas tem a desvantagem de que o látex ainda pode alterar o layout. O que normalmente é uma coisa boa, mas não com formas que devem seguir dimensões exatas.
eu usoPGF/Tikzque permite colocar qualquer coisa exatamente onde quiser, em uma página.
Embora seja uma espécie de força bruta (eu quero! isso! exatamente! ali!), ela cria exatamente o layout que você precisa. Os estilos de látex são totalmente preservados e todas as macros estão acessíveis.
As opções de nós são infinitas, então adicionei apenas as mais básicas aqui. Inserir gráficos é igualmente fácil.
\documentclass[a4paper]{article}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\node at (current page.south west){%
\begin{tikzpicture}[remember picture, overlay]
\draw (25mm,250mm) node [draw, anchor = south west, text width = 10 cm, minimum height = 3 cm]
{Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum } ;
\draw (135mm,250mm) node [draw, anchor = south west, text width = 3 cm, minimum height = 3 cm] {};
\end{tikzpicture}
};
\end{tikzpicture}
\end{document}