
Recebi uma grande ajuda em outra pergunta que fiz aqui com este projeto, mas procurando um pouco mais de orientação! Estou tentando definir uma região deste documento para ajustar/alinhar o texto. Isso ocorre porque este documento será usado para apostilas E ampliado para o tamanho de pôster.
Idealmente, eu usaria 2 versões deste documento com poucas alterações entre elas, uma com dimensões de 8,5 x 11 polegadas e outra com 24 x 36 polegadas. Dessa forma, podemos imprimir documentos bem formatados em cada tamanho.
Aqui está o documento atual (desculpe, tive que tirar uma foto pintada para ter bordas cinza onde não deveria haver bordas.
(EDITAR: documento baixado, bordas cinza cortadas, incluídas agora como imagem.)
As coisas que preciso consertar:
- Formato para caber abaixo do "título da série de seminários sobre bases celulares e moleculares de doenças" (isso faz parte de uma imagem de fundo, portanto não posso removê-la. E precisa caber acima das "montanhas" (linhas onduladas) na parte inferior do página.
- Removendo o espaço em branco extra entre "Hospedado por" e "Hora/Data". Esse problema vem da
\talkdata
definição da sinopse científica, então acho que preciso tornar isso um parâmetro opcional.
Qualquer ajuda para melhorar isso seria muito apreciada. Ainda sou bastante novo no Latex em geral!
(Editar: atualizei principalmente como acho que preciso, no entanto, provavelmente é muito ineficiente.}
Este é o código que estou usando (atualizado):
\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}
Responder1
Sugiro que você faça algumas alterações no seu MWE.
Definindo a área de texto
Primeiro: para definir a área onde seus anúncios podem ser digitados com segurança, você deve usar o geometry
-package, como já fez. Defini as quatro margens individualmente, para deixar claro onde alterar qual valor. Eu também adicionei a4paper
, pois você não especificou.
A opção showframe
é muito útil, como você pode ver, onde o typearea é definido. Basta inserir a opção (como fiz no meu exemplo) e imprimir o documento nacked em seu papel de fundo para ajustar as margens conforme necessário. Depois de definir a área de texto (ou região de texto, como você a chamou), você tem certeza de que os anúncios inseridos não devem interferir nas linhas superiores e inferiores do papel pré-impresso.
Definindo comandos para definir os anúncios
Ao escrever seu comentário, você deseja usar o LaTeX para imprimir um folheto de anúncio e também um pôster. O arquivo LaTeX deve ser digitado por uma pessoa que não seja treinada em LaTeX. Portanto, seu objetivo é mantê-lo o mais simples possível.
Portanto, sugiro que você mova todas as suas definições para um arquivo de modelo (ou estilo), para ocultá-lo e não confundir a pessoa que está criando o conteúdo.
Também traz a opção de definir opções que definem o tamanho do papel do flyer ou do pôster. Você pode definir um documento e só precisa alterar a opção. Nome da opção flyer
e poster
pode ser um nome bem escolhido.
Para ajudar ao máximo seu colega, sua primeira tentativa de usar comandos específicos \talkauthor
é, em princípio, uma boa ideia. Mas você não deve misturar a tarefa de armazenar conteúdos variáveis com tarefas de layout, como fez em seu código. Separe as duas tarefas em comandos diferentes.
Então, comece definindo variáveis (internas), que armazenam apenas conteúdo como o nome do autor. Para proteger essas variáveis de serem maltratadas pelo autor, defina comandos de espaço do usuário, que manipulam o conteúdo da variável de forma segura. Aqui está um pequeno exemplo, para ilustrar o que quero dizer:
\def\talk@author{}
\newcommand{\authorname}[1]{\def\talk@author{#1}}
A primeira linha define uma variável vazia de nome \talk@author
. Geralmente @
é um personagem protegido. Você não pode usá-lo em nomes de variáveis e comandos. Se você criar um arquivo de estilo conforme sugerido, ele @
poderá ser usado em nomes de variáveis e comandos.
A segunda linha define um novo comando, que não contém o mágico @
em seu nome. Portanto, ele pode ser chamado de dentro de um arquivo LaTeX normal. É necessário um argumento, que é entregue para ser o novo conteúdo da variável \talk@author
.
Você deve definir todas as variáveis necessárias dessa forma. O conteúdo inicial das variáveis não precisa estar vazio. Em alguns casos, você pode usar um valor padrão usado com frequência, por exemplo, digamos, na maioria das vezes, a sala HSSB é usada. Do que poderia ser uma ajuda gentil, para definir
\def\talk@room{\hssb}
Outra vantagem importante deste método é que seu colega tem liberdade para saber a ordem em que inserirá os comandos para definir o conteúdo das variáveis. Isso tornará seu arquivo "à prova de idiotas".
Lembre-se: armazene apenas o conteúdo puro. Mantenha-os separados das informações de layout.
Depois de definir todas as variáveis necessárias, você pode cuidar do(s) comando(s) para finalmente compor o documento de anúncio.
No seu comentário você disse
precisávamos adicionar 5 apresentadores (todos precisavam estar em uma única página)
Eu interpreto isso como "até 5 pessoas". (Ou seja: em alguns casos pode ser qualquer coisa, desde um apresentador até cinco apresentadores. Esse meu palpite é importante, como planejar seus próximos passos. Se eu estiver errado, e você sempre tiver cinco apresentadores naquele pôster, você pode agilizar um pouco o processo e o código.)
Sugiro o seguinte processo: seu colega irá inserir um monte de variáveis inserindo comandos como o new \authorname
, até que todos os detalhes da primeira aula estejam definidos. Então ela ou ele chama o comando, que faz o trabalho sujo, digamos \announce
. Depois disso, ele digita mais alguns comandos de manipulação de variáveis, mas desta vez, apenas aqueles cujos valores precisam ser alterados. (Por exemplo: se o quarto e a data forem iguais, mas apenas a hora e o título mudarem, basta alterar essas duas variáveis.) Em seguida, o \announce
comando é chamado novamente. Seu colega continuará até que todos os anúncios desejados tenham sido inseridos em seu arquivo.
Seu código é responsável por espalhar as informações inseridas na área de texto de forma inteligente.
Para se referir ao seu MWE: você costumava utilizar um \tabularx
ambiente. Tabularx é um ambiente semelhante a uma tabela. Seu objetivo é espalhar a largura total de uma mesa em alguma dimensão que você definiu. No seu caso, é 99% da largura do texto. (Por que você não usou 100% completo?) Você alinha a tabela por \centering
ele, o que resulta em 0,5% de largura de texto à esquerda e à direita da sua tabela. Ninguém jamais notará essa quantidade de espaço em branco, pois sua tabela consiste em apenas uma coluna, que também está centralizada. Na minha opinião, teria sido muito mais fácil definir a largura total da mesa como 100%.
Infelizmente, é preciso muito esforço para que uma coluna tenha a largura correta usando uma coluna definida com C{0.99\textwidth}
a qual é expandida para p{0.99\textwidth}
. A opção vantajosa do tabularx teria sido usar o X
-column, que calcula automaticamente a largura desejada/necessária de tais colunas. Teria sido tão fácil codificar para você.
Agora devo encerrar minha excursão sobre seu exemplo de código. Espero que você não se importe, eu apontei as falhas do seu código; em vez disso, espero ter conseguido mostrar como escrever um código melhor.
Uma tabela com apenas uma coluna também vale uma pergunta. Precisamos de um pouco de mágica para alinhar as várias partes do seu anúncio horizontalmente centralizadas no papel. Claro, você pode usar o \center
comando simples, um \parbox
ou até mesmo um arquivo minipage
. Contanto que todos (no máximo) cinco anúncios sejam impressos uns sobre os outros, não faz sentido cortar o comprimento de linha utilizável como você fez em seu MWE.
Na minha primeira tentativa, substituí a tabela com colunas por um minipage
, que usa \centering
. Como eu mesmo expliquei (e agora para você, caro leitor), isso é estúpido. Substituirei a minipágina por plain \centering
.
Comandos como \bf
não devem mais ser usados. Você deve usar \bfseries
em vez disso.
Como você não forneceu a imagem de fundo, comentei isso. Isso não afeta o posicionamento dos outros dados.
Arquivo de entrada LaTeX
Então aqui está a nova sugestão, que é apenas parte do jogo. Este pode ser o arquivo de entrada. Tentei mantê-lo o mais simples possível.
%% 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}
O novo modelo
Infelizmente, no meu fuso horário, é tarde. Tarde demais para criar um exemplo completo. Talvez eu possa adicionar um pouco mais de magia amanhã.
%%%
%%% @(#) 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:
Resultado
Este é o resultado como folheto.
Observação
Minha classe de modelo de exemplo está funcionando para a flyer
opção.
Codifiquei para usar o poster
arquivo de classe, se a poster
opção -deve ser usada, mas não verifiquei se isso funciona. Talvez você precise pesquisar no TeX.SE para encontrar um modelo que possa ser usado para seus propósitos.
Claro que há algum trabalho a fazer, para corrigir as margens dos folhetos e cartazes, para adaptar a imagem de fundo, ...
(Falando em imagem de fundo: inseri esse código depois de produzir o resultado.)