
Recibí una gran ayuda con otra pregunta que hice aquí con este proyecto, ¡pero buscaba un poco más de orientación! Estoy intentando definir una región de este documento para ajustar/alinear el texto. Esto se debe a que este documento se utilizará para folletos Y se ampliará al tamaño de un póster.
Lo ideal sería utilizar 2 versiones de este documento con muy pocos cambios entre ellas, una con dimensiones de 8,5 x 11 pulgadas y otra con 24 x 36 pulgadas. De esa manera podemos imprimir documentos perfectamente formateados en cada tamaño.
Aquí está el documento actual (lo siento, tuve que tomar una imagen pintada para que tenga bordes grises donde no debería haber bordes).
(EDITAR: documento descargado, bordes grises recortados, incluido ahora como imagen).
Las cosas que necesito arreglar:
- Formato para que quepa debajo del título de la serie de seminarios "Bases celulares y moleculares de las enfermedades" (Esto es parte de una imagen de fondo, por lo que no puedo eliminarlo. Y debe caber encima de las "montañas" (líneas garabateadas) en la parte inferior del página.
- Eliminando el espacio en blanco adicional entre "Alojado por" y "Hora/Fecha". Este problema proviene de la
\talkdata
definición de la propaganda científica, así que creo que debo convertirlo en un parámetro opcional.
Cualquier ayuda para mejorar esto sería muy apreciada. ¡Todavía soy bastante nuevo en el látex en general!
(Editar: he actualizado esto principalmente como creo que lo necesito, sin embargo, es probable que sea muy ineficiente).
Este es el código que estoy usando (actualizado):
\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}
Respuesta1
Le sugiero que haga algunos cambios en su MWE.
Definiendo el área de texto
Primero: para definir el área donde sus anuncios se pueden componer de forma segura, debe usar el geometry
paquete -, como ya lo hizo. Definí los cuatro márgenes individualmente, para dejar claro dónde cambiar qué valor. También agregué a4paper
, ya que no lo especificaste.
Es muy útil la opción showframe
, como puedes ver, donde se define el área de tipo. Simplemente inserte la opción (como hice en mi ejemplo) e imprima el documento desnudo en su papel de fondo para ajustar los márgenes según sea necesario. Cuando haya definido el área de texto (o región de texto, como la llamó), estará seguro de que los anuncios insertados no deben interferir con las líneas superiores e inferiores del papel preimpreso.
Definición de comandos para configurar los anuncios.
Mientras escribe su comentario, desea utilizar LaTeX para imprimir un folleto publicitario y un póster. El archivo LaTeX debe ser escrito por una persona que no esté capacitada en LaTeX. Por lo tanto, su objetivo es mantenerlo lo más simple posible.
Por lo tanto, le sugiero que mueva todas sus definiciones a un archivo de plantilla (o estilo) para ocultarlo y no confundir a la persona que está creando el contenido.
Esto también incluye la opción de definir opciones que definan el tamaño del papel para el folleto o el póster. Puedes definir un documento y solo tienes que cambiar la opción. Nombre de la opción flyer
y poster
podría demostrar que son nombres bien elegidos.
Para ayudar a su colega tanto como sea posible, su primer intento de utilizar comandos específicos como \talkauthor
es, en principio, una buena idea. Pero no debes mezclar la tarea de almacenar contenidos variables con tareas de diseño, como lo hiciste en tu código. Separe ambas tareas en diferentes comandos.
Entonces, comience definiendo variables (internas), que solo almacenan contenido como el nombre del autor. Para proteger esas variables de ser maltratadas por el autor, defina comandos de espacio de usuario, que manipulen el contenido de las variables de forma segura. Aquí hay un breve ejemplo, para ilustrar lo que quiero decir:
\def\talk@author{}
\newcommand{\authorname}[1]{\def\talk@author{#1}}
La primera línea define una variable vacía del nombre \talk@author
. Por @
lo general es un personaje protegido. No puede usarlo en nombres de variables y comandos. Si crea un archivo de estilo como se sugiere, se @
permite usarlo en nombres de variables y comandos.
La segunda línea define un nuevo comando, que no contiene el carácter mágico @
en su nombre. Por lo tanto, se puede llamar desde un archivo LaTeX normal. Se necesita un argumento, que se entrega como el nuevo contenido de la variable \talk@author
.
Debe definir todas las variables necesarias de esa manera. No es necesario que el contenido inicial de las variables esté vacío. En algunos casos, puede utilizar un valor predeterminado de uso frecuente; por ejemplo, digamos que la mayor parte del tiempo se utiliza la sala HSSB. Que podría ser una suave ayuda, para definir
\def\talk@room{\hssb}
Otra ventaja importante de este método es que su colega tiene libertad y en qué orden insertará los comandos para definir los contenidos de las variables. Hará que su archivo sea "infalible".
Recuerde: simplemente almacene el contenido puro. Manténgalos separados de la información de diseño.
Después de haber definido todas las variables necesarias, puede ocuparse de los comandos para finalmente componer el documento de anuncio.
En tu comentario dijiste
necesitábamos agregar 5 presentadores (todos debían estar en una sola página)
Lo interpreto como "hasta 5 personas". (Es decir: en algunos casos puede ser desde un presentador hasta cinco presentadores. Esta suposición mía es importante: cómo planificar sus próximos pasos. Si me equivoco y siempre tiene cinco presentadores en ese cartel, puede simplificar un poco el proceso y el código).
Sugiero el siguiente proceso: su colega insertará un montón de variables insertando comandos como el nuevo \authorname
, hasta que se definan todos los detalles de la primera conferencia. Entonces él o ella llama al comando, que hace el trabajo sucio, digamos \announce
. Después de eso, escribe algunos comandos de manipulación de variables más, pero esta vez, solo aquellos cuyos valores deben cambiarse. (Por ejemplo: si la habitación y la fecha son las mismas, pero solo cambian la hora y el título, basta con cambiar esas dos variables). Luego, \announce
se vuelve a llamar el comando. Su colega continuará hasta que todos los anuncios deseados se hayan insertado en su archivo.
Su código es responsable de difundir la información insertada en el área de texto de manera inteligente.
Para referirse a su MWE: solía utilizar un \tabularx
entorno. Tabularx es un entorno tipo mesa. Su objetivo es extender el ancho total de una tabla a alguna dimensión que usted haya definido. En su caso, es el 99 % del ancho del texto. (¿Por qué no usaste el 100 % completo?) Alineas la tabla según \centering
esto, lo que da como resultado un ancho de texto del 0,5 % a la izquierda y a la derecha de la tabla. Nadie notará jamás esta cantidad de espacio en blanco, ya que su tabla consta de una sola columna, que tampoco está centrada. En mi opinión, hubiera sido mucho más fácil definir el ancho total de la mesa al 100 %.
Desgraciadamente, se necesita mucho esfuerzo para que una columna tenga el ancho correcto utilizando una columna definida con C{0.99\textwidth}
la que se expande a p{0.99\textwidth}
. La opción ventajosa de tabularx habría sido utilizar la X
columna -, que calcula automáticamente el ancho deseado/necesario de dichas columnas. Habría sido muy fácil codificar para ti.
Ahora debería finalizar mi excursión sobre su ejemplo de código. Espero que no te importe, señalé las fallas de tu código; en cambio, espero haber podido mostrarte cómo escribir un mejor código.
Una tabla con una sola columna también merece una pregunta. Necesitamos algo de magia para alinear las distintas partes de su anuncio horizontalmente centradas en el papel. Por supuesto, puedes usar el \center
comando simple -, a \parbox
o incluso a minipage
. Mientras los (máximo) cinco anuncios se impriman uno encima del otro, no tiene sentido recortar la longitud de línea utilizable como lo hizo en su MWE.
En mi primer intento, sustituí la tabla de una columna por minipage
, que usa \centering
. Como ya me expliqué (y ahora a usted, amable lector), esto es una estupidez. Sustituiré la minipágina por simple \centering
.
Comandos como este \bf
ya no deberían usarse. Deberías usar \bfseries
en su lugar.
Como no proporcionaste la imagen de fondo, lo comenté. No afecta el posicionamiento de los demás datos.
Archivo de entrada de látex
Así que aquí está la nueva sugerencia, que es sólo una parte del juego. Este podría ser el archivo de entrada. Intenté mantenerlo lo más simple posible.
%% 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}
la nueva plantilla
Lamentablemente, en mi zona horaria, es tarde. Demasiado tarde para crear un ejemplo completo. Tal vez pueda agregar algo más de magia mañana.
%%%
%%% @(#) 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 es el resultado como volante.
NÓTESE BIEN
Mi clase de plantilla de ejemplo funciona para la flyer
opción.
He codificado para usar el poster
archivo de clase, si poster
se debe usar la opción -, pero no he verificado que esto funcione. Tal vez tenga que buscar en TeX.SE para encontrar una plantilla que pueda usarse para sus propósitos.
Eso sí, queda trabajo por hacer, corregir los márgenes de folletos y carteles, adaptar la imagen de fondo,...
(Hablando de la imagen de fondo: inserté ese código después de producir el resultado).