Определение текстовой области

Определение текстовой области

Я получил большую помощь по другому вопросу, который я задал здесь в рамках этого проекта, но мне нужно немного больше руководства! Я пытаюсь определить область этого документа, чтобы подогнать/выровнять текст. Это потому, что этот документ будет использоваться для раздаточных материалов И увеличен до размера плаката.

В идеале я бы использовал 2 версии этого документа с очень небольшими изменениями между ними, одну с размерами 8,5 x 11 дюймов и одну с 24 x 36 дюймов. Таким образом, мы можем распечатать аккуратно отформатированные документы в каждом размере.

Вот текущий документ (извините, пришлось сделать снимок в цвете, поэтому у него серые границы там, где их быть не должно).

(ПРАВКА: документ загружен, серые рамки обрезаны, теперь включен как изображение.)

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

Что мне нужно исправить:

  • Отформатируйте так, чтобы текст поместился под заголовком «Серия семинаров по клеточным и молекулярным основам заболеваний» (это часть фонового рисунка, поэтому я не могу его удалить). И он должен поместиться над «горами» (волнистыми линиями) в нижней части страницы).
  • Удаляем лишний пробел между "Hosted By" и "Time/Date". Эта проблема возникает из \talkdataопределения научного аннотирования, поэтому я думаю, что мне нужно сделать это необязательным параметром?

Любая помощь в улучшении этого будет высоко оценена. Я все еще довольно новичок в Latex в целом!

(Изменение: я в основном обновил это так, как мне кажется нужным, однако это, скорее всего, очень неэффективно.}

Вот код, который я использую (обновлено):

\documentclass[11pt]{article}
\usepackage{xcolor}
\usepackage{background}
\usepackage[margin=0.5in, total={24in, 36in}]{geometry}
\usepackage{csquotes}
\usepackage{array}
\usepackage{tabularx}
\usepackage[T1]{fontenc}
\usepackage{uarial}
\usepackage{adjustbox}
\renewcommand{\familydefault}{\sfdefault}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\renewcommand{\familydefault}{\sfdefault}
\backgroundsetup{
scale=1,
angle=0,
opacity=1,  %% adjust
contents={\includegraphics[width=\paperwidth,height=\paperheight]{cmbd_watermark}}
}

%Define Colors
\definecolor{redA}{HTML}{8D3B33}
\definecolor{aqua}{HTML}{008D9B}

%My Room/misc Definitions
\newcommand{\lb}{\linebreak}
\newcommand{\vs}{\newline \vspace*{1 cm} \newline}
\newcommand{\dom}{Domenici Auditorium, Room 1220}
\newcommand{\hssb}{HSSB, Room 105}
\newcommand{\fitzthree}{Fitz Hall, Room 309}
\newcommand{\fitztwo}{Fitz Hall, Room 203}

%Define Talk Data
\newcommand{\talkdate}[1]{\fontsize{20}{20}\selectfont{\color{aqua}{\textbf{#1}}}}
\newcommand{\talkauthor}[1]{\color{redA}{\fontsize{30}{30}\selectfont{\textbf{ #1}}}}
\newcommand{\talktitle}[1]{\fontsize{20}{20}\selectfont{\textcolor{redA}{\enquote{\textit{\textbf{#1}}}}}}
\newcommand{\hostedby}[1]{\bf \textit{{\color{black} Hosted by: #1}}}
\newcommand{\timeandlocation}[2]{\fontsize{12}{12}\selectfont{ \bf \color{aqua}{ Time: #1}\lb 
           \bf \color{aqua}{ Location: #2}}}
\newcommand{\sciblurb}[1][]{\normalsize \color{black}{#1}}
\newcommand{\addtitle}[1]{\fontsize{12}{12}\selectfont{ \color{redA}{#1} }}



\newcommand{\talkdata}[8]{%
\begingroup
\renewcommand{\arraystretch}{0.6}
\begin{tabularx}{0.99\linewidth}{@{}C{0.99\linewidth}@{}}
\rule{0pt}{2ex}\talkdate{#1} \tabularnewline
\rule{0pt}{0ex}\begin{adjustbox}{max width=\textwidth,max height=\textheight,keepaspectratio}\talkauthor{#2}\end{adjustbox}\tabularnewline
\rule{0pt}{0ex}\addtitle{#3} \tabularnewline
\rule{0pt}{3ex}\begin{adjustbox}{max width=\textwidth,max height=\textheight,keepaspectratio}{{\talktitle{#4}}}\end{adjustbox} \tabularnewline
\rule{0pt}{2ex}\hostedby{#5} \tabularnewline
\rule{0pt}{2ex}\timeandlocation{#6}{#7}\tabularnewline
\end{tabularx}
\endgroup
}


\begin{document}

\pagestyle{empty}
\setlength{\parindent}{0em}
\vspace*{\fill}
\begin{center}
\begin{adjustbox}{width=\textwidth,totalheight=6.8in}
\begin{tabular}{rrr}

%/////////////////// Only Below this change below this line.//////////////////////////////////////////////////////////
\talkdata
    {January 27, 2017}
    {Farrah Kheradmand M.D.}                                                          %The Presenter for current Series
    { Professor, Baylor College of Medicine}                                                        %Title 2
    {Cigarette Smoke and DNA Cleavage Promote Lung Inflammation \& Emphysema}    %Presentation Title
    {Dr. Xuexian Yang}                                                                                                       % Host
    {12:00 PM - 1:00 PM}                                                                                                    %Time
    {\hssb}{} 
    \vs \\

\talkdata
    {January 27, 2017}
    {Farrah Kheradmand M.D.}                                                          %The Presenter for current Series
    { Professor, Baylor College of Medicine}                                                        %Title 2
    {Cigarette Smoke and DNA Cleavage Promote Lung Inflammation \& Emphysema}    %Presentation Title
    {Dr. Xuexian Yang}                                                                                                       % Host
    {12:00 PM - 1:00 PM}                                                                                                    %Time
    {\hssb}{} 
    \vs \\

\talkdata
    {January 27, 2017}
    {Farrah Kheradmand M.D.}                                                          %The Presenter for current Series
    { Professor, Baylor College of Medicine}                                                        %Title 2
    {Cigarette Smoke and DNA Cleavage Promote Lung Inflammation \& Emphysema}    %Presentation Title
    {Dr. Xuexian Yang}                                                                                                       % Host
    {12:00 PM - 1:00 PM}                                                                                                    %Time
    {\hssb}{} 
    \vs \\                                                                                              

%/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
\end{tabular} 
\end{adjustbox}    
\end{center}
\vspace*{\fill}
\begin{minipage}[t]{0.5\textwidth}
\scriptsize{The Cellular and Molecular Basis of Disease Seminar Series is sponsored by the UNM HSC
School of Medicine, the Office of Research, the Departments of Pathology, Neurosciences,
Molecular Genetics and Microbiology, Biochemistry and Molecular Biology, Cell Biology and
Physiology, Peadiatrics, and the Signature Programs.}
\end{minipage}

\end{document}

решение1

Я предлагаю вам внести некоторые изменения в ваш MWE.

Определение текстовой области

Первое: чтобы определить область, в которой ваши объявления могут быть безопасно набраны, вы должны использовать -package geometry, как вы уже сделали. Я определил четыре поля по отдельности, чтобы было понятно, где какое значение менять. Я также добавил a4paper, так как вы этого не указали.

Как вы видите, эта опция showframeочень полезна, когда определяется typearea. Просто вставьте опцию (как я сделал в своем примере) и распечатайте чистый документ на фоновой бумаге, чтобы отрегулировать поля по мере необходимости. Когда вы определили текстовую область (или текстовую область, как вы ее назвали), вы уверены, что ваши вставленные объявления не должны пересекаться со строками сверху и снизу вашей предварительно отпечатанной бумаги.

Определение команд для установки объявлений

Как вы пишете в своем комментарии, вы хотите использовать LaTeX для печати рекламного флаера, а также плаката. Файл LaTeX должен быть набран человеком, не обученным LaTeX. Поэтому вы стремитесь сделать его максимально простым.

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

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

Чтобы помочь коллеге как можно больше, ваша первая попытка использовать определенные команды, такие как , \talkauthorв принципе, хорошая идея. Но вы не должны смешивать задачу хранения содержимого переменных с задачами макета, как вы сделали в своем коде. Разделите обе задачи в разных командах.

Итак, начните с определения (внутренних) переменных, которые хранят только содержимое, например имя автора. Чтобы защитить эти переменные от неправильного обращения со стороны автора, определите команды пользовательского пространства, которые будут манипулировать содержимым переменных безопасным способом. Вот короткий пример, чтобы проиллюстрировать, что я имею в виду:

\def\talk@author{}
\newcommand{\authorname}[1]{\def\talk@author{#1}}

Первая строка определяет пустую переменную имени \talk@author. @Обычно это защищенный символ. Его нельзя использовать в именах переменных и команд. Если вы создаете файл стиля, как предлагается, то @разрешается использовать в именах переменных и команд.

Вторая строка определяет новую команду, которая не содержит @в своем имени слово magic. Поэтому ее можно вызвать из обычного файла LaTeX. Она принимает один аргумент, который передается в качестве нового содержимого переменной \talk@author.

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

\def\talk@room{\hssb}

Еще одним важным преимуществом этого метода является то, что ваш коллега свободен в том, в каком порядке он или она будет вставлять команды для определения содержимого переменных. Это сделает ваш файл "защищенным от дурака".

Помните: просто храните чистый контент. Храните его отдельно от информации о макете.

После определения всех необходимых переменных вы можете заняться командой(ами) для окончательного оформления документа объявления.

В своем комментарии вы сказали

нам нужно было добавить 5 докладчиков (все должны были быть на одной странице)

Я интерпретирую это как «до 5 человек». (То есть: в некоторых случаях это может быть от одного до пяти докладчиков. Эта моя догадка важна для планирования ваших следующих шагов. Если я ошибаюсь, и у вас всегда пять докладчиков на этом постере, вы можете немного упростить процесс и код.)

Я предлагаю следующий процесс: ваш коллега вставит кучу переменных, вставляя команды вроде new \authorname, пока все детали для первой лекции не будут определены. Затем он или она вызывает команду, которая выполняет грязную работу, скажем \announce. После этого он или она вводит еще несколько команд для управления переменными, но на этот раз только те, значения которых нужно изменить. (Например: если комната и дата те же самые, но меняется только время и заголовок, достаточно изменить эти две переменные.) После этого команда \announceвызывается снова. Ваш коллега продолжит, пока все желаемые объявления не будут вставлены в ваш файл.

Ваш код отвечает за разумное распределение вставленной информации по текстовой области.

Для вашего MWE: вы использовали -environment \tabularx. Tabularx - это таблично-подобная среда. Ее цель - распространить общую ширину таблицы на некоторое измерение, которое вы определили. В вашем случае это 99% ширины текста. (Почему вы не использовали все 100%?) Вы выравниваете таблицу по \centeringней, что приводит к 0,5% ширине текста слева и справа от вашей таблицы. Никто никогда не заметит этого количества пустого пространства, так как ваша таблица состоит только из одного столбца, который также центрирован. По моему мнению, было бы намного проще определить общую ширину таблицы как 100%.

Увы, вам придется приложить немало усилий, чтобы получить один столбец правильной ширины, используя столбец определенного с помощью C{0.99\textwidth}которого он расширяется до p{0.99\textwidth}. Выгодным вариантом tabularx было бы использование -column X, который автоматически вычисляет желаемую/необходимую ширину таких столбцов. Это было бы так просто для вас.

Теперь мне следует закончить экскурсию по вашему примеру кода. Надеюсь, вы не против, что я указал на недостатки вашего кода, вместо этого, надеюсь, я смог показать, как писать код лучше.

Таблица с одним столбцом также заслуживает вопроса. Нам нужна магия, чтобы выровнять различные части вашего объявления по горизонтали и центрировать их на бумаге. Конечно, вы можете использовать простую \centerкоманду -, a \parboxили даже a minipage. Пока все (макс.) пять объявлений печатаются друг над другом, нет смысла обрезать полезную длину строки, как вы сделали в MWE.

В своей первой попытке я заменил одноколоночную таблицу на minipage, которая использует \centering. Как я объяснил себе (а теперь и вам, любезный читатель), это глупо. Я заменю мини-страницу на простую \centering.

Команды типа \bfбольше не следует использовать. Вместо этого следует использовать \bfseries.

Поскольку вы не предоставили фоновое изображение, я его закомментировал. Это не влияет на позиционирование других данных.

Входной файл LaTeX

Итак, вот новое предложение, которое является лишь частью игры. Это может быть входной файл. Я старался сделать его максимально простым.

%% Use the new template
\documentclass[flyer]{announcement}

\begin{document}
%% First speaker
\authorname{Prof. Dr. Drofnats}
\authorinfo{Stanford University, Department of Typography}
\talkdate{2017-02-03}\talktime{2pm--3pm}
\talkroom{\dom}
\talktitle{There is no such thing as good typography}
\host{Joe Green}
\announce
%% Second speech, same author, only title and time differ.
\talktitle{Against unreadability}
\talktime{3pm--5pm}
\announce
\end{document}

Новый шаблон

К сожалению, в моем часовом поясе уже поздно. Слишком поздно, чтобы создать полноценный пример. Может быть, завтра я смогу добавить еще немного магии.

%%%
%%% @(#) announcement.cls -- Announcements as flyer or as poster
%%%
%%% Time-stamp:  <2017-02-01 23:08:00 tmjb>
%%%
%%%
%%% @(#)       $Id: $
%%% @(#) $Keywords: Announcements, Flyer, Poster $
%%%
%%%
%%%           File: /Users/tmjb/Desktop/LaTeX-Test/announcement.cls
%%%        Project: 
%%%    Description: This is a meta template, which calls the default
%%%                 class and adds some magic.
%%%        Version: $Revision:  $
%%%         Author: tmjb -- Jan Braun <[email protected]>
%%%     Maintainer: tmjb -- Jan Braun <[email protected]>
%%%  Creation-Date: Wed Feb  1 2017 -- Jan Braun <[email protected]>
%%%      Copyright: (c) 2017 Jan Braun Creative Commons Licence 
%%%

%%% ------------------------------------------------------ &Change Log ---
%%%
%%% $Log: $


%%% ============================================================ &Code ===

%%% ---------------------------------------------------- &Package Name ---
% \NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{announcement}[2017/02/01 Announcements as flyer or as poster V 0.1.1]


%%% ------------------------------------------------------- &Variables ---
%% We need some variables, to store and indicate which options (see
%% later) are choosen ...
\newif\if@flyer                 % for Option flyer



%%% --------------------------------------------------------- &Options ---
%% Options are definid by the main package or for this special style
%% file.  Just add them in square brackets like this:
%% \usepackage[final,foo,bar]{announcement.sty}
%% I advise, to avoid using final and draft in package related
%% options, as the are normally handed over from the main class
%% package options.
%%
%% ............................................................ &draft ...
%% Option flyer is used to print smaller anouncements.  Usual
%% papersize in europe is DIN A4.
\DeclareOption{flyer}{
  \@flyertrue
  %% insert your desired paper size here
  \def\paper@size{a4paper}
}

%% ............................................................ &final ...
%% Option poster is used to print a bogger announcement.  Usual
%% papersize in europe is DIN A1 or even DIN A0.  Adapt it to your
%% needs.
\DeclareOption{poster}{
  \@dflyerfalse
  \def\paper@size{a0paper}
}


%% ....................................................... &Undeclared ...
%% This one is for any option, which was not declared before.
\DeclareOption*{%
  \if@flyer%
    \PassOptionToClass{\CurrentOption}{article}%
  \else%
    \PassOptionToClass{\CurrentOption}{poster}%
  \fi%
}%

%% Set the options.
\ExecuteOptions{flyer}
\ProcessOptions\relax



%%% -------------------------------------------------------- &Messages ---
%% Print out some warning messages, while compiling the text.
\if@flyer
  \typeout{\MessageBreak announcement.sty: WARNING! FLYER-mode is in use! \MessageBreak }
\fi



%%% -------------------------------------------------------- &Packages ---
%%
%% To get all definitions of this style to work, we need some more
%% packages.  They are automatically loaded here.
%%
\if@flyer%
  \RequirePackage[
  \paper@size,
  left=1cm,
  right=1cm,
  top=4cm,
  bottom=2cm]{geometry}
\else%
  \RequirePackage[
  \paper@size,
  left=4cm,
  right=4cm,
  top=16cm,
  bottom=6cm]{geometry}         % for page layout
\fi%
\RequirePackage{xcolor}         % for colors

%%% ====================================================== &Definitions ===

%%% ---------------------------------------------------------- &Colors ---
%%% 
%%% Define the most used colors
\definecolor{redA}{HTML}{8D3B33}
\definecolor{aqua}{HTML}{008D9B}


%%% ------------------------------------------------ &Constant-Strings ---
%%% 
%%% Define constant strings
\def\hssb{HSSB, Room 105}
\def\dom{Domenici Auditorium, Room 1220}
% to be continued


%%% --------------------------------------------------------- &Layouts ---
%%% 
%%% Define some helpfull constants and commands concerning the layout.

%% Define different fontsizes, depending on flyer or poster
%% target
\if@flyer%
  \def\titlefont@size{\fontsize{20}{24}}
  \def\infofont@size{\fontsize{10}{12}}
  \def\smallfont@size{\fontsize{8}{10}}
  \backgroundsetup{
    scale=1,
    angle=0,
    opacity=1,  %% adjust
    contents={\includegraphics[width=\paperwidth,height=\paperheight]{cmbd_watermark}}
  }
\else%
  \def\titlefont@size{\fontsize{60}{72}}
  \def\infofont@size{\fontsize{30}{36}}
  \def\smallfont@size{\fontsize{24}{30}}
\fi%
%% 
%% The rest of the commands does not depend on the target.
\def\talk@titlefont{\infofont@size\bfseries\itshape\selectfont\color{redA}}
\def\talk@authorfont{\titlefont@size\bfseries\upshape\selectfont\color{redA}}
\def\talk@authorinfofont{\smallfont@size\upshape\selectfont\color{redA}}
\def\talk@datetimefont{\infofont@size\bfseries\upshape\selectfont\color{aqua}}
\def\talk@hostfont{\smallfont@size\itshape\selectfont\color{black}}


%%% ------------------------------------------------------- &Variables ---
%% Define the internal variables, we need
\def\talk@date{}
\def\talk@time{2pm}
\def\talk@location{\hssb}
\def\talk@author{}
\def\talk@authorinfo{}
\def\talk@title{}
\def\talk@host{Dr. Joe Doe}


%%% --------------------------------------------------- &User-Commands ---
%%% 
%%% The following commands define the user space commands to
%%% manipulate the contents of the above variables
\newcommand{\authorname}[1]{\def\talk@author{#1}}
\newcommand{\authorinfo}[1]{\def\talk@authorinfo{#1}}
\newcommand{\talktitle}[1]{\def\talk@title{#1}}
\newcommand{\talkdate}[1]{\def\talk@date{#1}}
\newcommand{\talktime}[1]{\def\talk@time{#1}}
\newcommand{\talkroom}[1]{\def\talk@room{#1}}
\newcommand{\talkhost}[1]{\def\talk@host{#1}}


%%% -------------------------------------------------------- &Announce ---
\newcommand{\announce}{%
  %% distribute all \announcements evenly on the page.  Center it
  %% horizontally. 
  \vspace*{\fill}%
  \centering%
  %% Start with the date, time info
  \talk@datetimefont%
  \talk@date\\%
  \talk@time\\[2ex]              % use font dependend skips
  %% Print the author name and the info
  \talk@authorfont\talk@author\\[0.8ex]%
  \talk@authorinfofont\talk@authorinfo\\[2ex]%
  %% Print the title of the speech
  \talk@titlefont\talk@title\\[2ex]%
  %% Last but not least, the room and host
  \talk@datetimefont Room: \talk@room\\%
  \talk@hostfont Host: \talk@host\\%
  %% dont forget the vertical space
  \vspace*{\fill}%
}%

%%% Load the package
\if@flyer%
  \LoadClass{article}%
\else%
  \LoadClass{poster}%
\fi%

%% 
%% No pagenumbering and headings.
\pagestyle{empty}

\endinput
%%% ============================================================= &EOF ===

%%% Local Variables:
%%% mode: LaTeX
%%% TeX-engine: luatex 
%%% TeX-master: "test.tex"
%%% TeX-parse-self: t
%%% TeX-auto-save: t
%%% End:

Результат

Это результат в виде листовки.

Примечание.

Мой пример шаблонного класса работает для этого flyerварианта.

Я закодировал, чтобы использовать posterфайл класса, если poster-option должен использоваться, но я не проверял, что это работает. Возможно, вам придется поискать в TeX.SE, чтобы найти шаблон, который можно использовать для ваших целей.

Конечно, предстоит проделать определенную работу: подкорректировать поля листовок и плакатов, адаптировать фоновое изображение, ...

(Говоря о фоновом изображении: я вставил этот код после получения результата.)

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

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