Как создать макет страницы с рамками?

Как создать макет страницы с рамками?

Для отчета, который я пишу, у меня есть шаблон страницы MS Word, который нужно включить. Страница выглядит так (скрин из Word):

Скриншот документа Word

Однако есть несколько вещей, из-за которых мне не хочется использовать этот шаблон в его нынешнем виде, а переписать его в LaTeX:

  1. Эта страница в Word, а остальная часть моего отчета в LaTeX. Поэтому стили будут разными, включая шрифты и ширину линий, например.
  2. Word преобразует векторные изображения, хранящиеся в формате PDF, в растровые изображения с низким разрешением, когда вы их включаете (и да, они все равно растрируются после того, как вы распечатываете их как файл PDF).

Ну ладно, хватит спорить об использовании LaTeX и перейдем к вопросу:Как мне добиться такого вида макета с помощью LaTeX?? Все, что мне нужно знать на данный момент, это как создать такие блоки, которые будут располагаться прямо рядом друг с другом в этом шаблоне, и как правильно разместить текст внутри блоков.

Редактировать:Было бы неплохо, если бы размеры ящиков не зависели от содержимого внутри них. Таким образом, макет оставался бы одинаковым для разных людей, использующих один и тот же шаблон LaTeX. Мой факультет в университете, возможно, собирается использовать его в качестве официальной альтернативы шаблону Word.

решение1

Я делаю это в своих отчетах. Сначала вам нужна настройка в вашем файле класса или стиля. В моем случае это наш класс отчета, и он содержит следующие определения для создания правительственной формы 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}}

Как вы видите, он использует собственную среду изображений LaTeX, в которой он накладывает ваш текст поверх пустой формы (пустая форма импортируется как графика). Затем в вашем документе вам нужно вызвать среду, чтобы нарисовать изображение:

%% 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}

Чистый результат:

введите описание изображения здесь


В ответ на просьбу привести самостоятельный пример, я взял изображение спрашивающего в верхней части этой страницы и сохранил его (как form.png). Затем я написал этот сокращенный фрагмент

\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}

Результат выглядит следующим образом: номер отчета, дата и расширенный текстовый раздел были добавлены в форму пользователя. В этом примере я использую как среду для добавления данных ( \SFitemSEVENTEEN), так и ранее определенные данные ( \pubdateи \rptno) в форме

введите описание изображения здесь

решение2

Просто несколько советов,

  1. Используйте minipagesи используйте интерфейс ключ-значение для ввода данных. Ввод данных, когда у вас есть 10 минут, чтобы получить форму для позднего отчета, который теряется в лавине команд LaTeX, сбивает с толку и подвержен ошибкам. Думайте, minipagesкак divsбудто вы знакомы с htmlтой же концепцией.
  2. Познакомьтесь с вашим minipages. Вам придется использовать полную форму команд, т. е. учитывать внешнее и внутреннее выравнивание, а также указывать высоту коробки.
  3. Используйте fboxпри создании прототипа, но вы можете захотеть использовать правила в финальной версии.
  4. Выделите по крайней мере 1-2 часа, чтобы получить идеальную форму. TikZ тоже может быть вашим другом, если вы с ним знакомы. На случай, если кто-то попросит скруглить углы.

Я обычно использую PGFдля ключей. Вот 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}

решение3

Используйте tableокружение с комбинацией minipageокружения в столбцах, и вы получите это. Вам нужно рассмотреть multicolumnи multirowпакеты, чтобы сделать этот формат возможным.

Другое решение — проверитьбапостердля постеров LaTeX. Он очень оптимизирован для создания таких странных макетов. Создайте PDF с ним и включите его в свой документ LaTeX.

решение4

Использование плавающих элементов или мини-страниц имеет недостаток: Latex все еще может изменить макет. Что обычно хорошо, но не с формами, которые должны следовать точным размерам.

я используюПГФ/Тикзчто позволяет вам размещать все, что угодно, именно там, где вам нужно, на странице.

Хотя это своего рода грубая сила (я хочу !это! именно !там!), она создает именно тот макет, который вам нужен. Стили Latex полностью сохранены, и все макросы доступны.

Вариантов для узлов бесконечное множество, поэтому я добавил сюда только самые основные. Вставка графики также проста.

\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}

введите описание изображения здесь

Связанный контент