Como posso construir um layout de página com caixas emolduradas?

Como posso construir um layout de página com caixas emolduradas?

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):

Uma printscreen do documento 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:

  1. 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.
  2. 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 é

insira a descrição da imagem aqui


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 ( \pubdatee \rptno) dentro do formulário

insira a descrição da imagem aqui

Responder2

Apenas algumas dicas,

  1. Use minipagese 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. Pense minipagescomo divsse você estivesse familiarizado com htmlo mesmo conceito.
  2. 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.
  3. Use fboxdurante a prototipagem, mas você pode querer usar regras na versão final.
  4. 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 PGFpara 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 tableambiente com combinação de minipageambiente em colunas e você conseguirá. Você precisa considerar multicolumnpacotes multirowpara 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}

insira a descrição da imagem aqui

informação relacionada