Como esticar a margem de uma linha e evitar que o último elemento quebre a linha?

Como esticar a margem de uma linha e evitar que o último elemento quebre a linha?

Edição 1: A imagem deve ser "Três linhas em vez de quatro".

Edição 2: Código compilável atualizado.

Sou novo no Latex e tenho o seguinte código de modelo que fornece um título para minha tese:


\documentclass[headsepline,footsepline,footinclude=false,oneside,fontsize=11pt,paper=a4,listof=totoc,bibliography=totoc]{scrbook} % one-sided
\usepackage{graphicx}
\usepackage[ngerman,american]{babel}
\newcommand*{\getUniversity}{University of Earth}
\newcommand*{\getFaculty}{Engineering Department}
\newcommand*{\getDegree}{Computer Science}
\newcommand*{\getSchool}{School of Public Science}
\newcommand*{\getTitle}{This is a Long title that I want to stretch the Margin so that instead of 4 lines, it should only be 3 lines, and the logo at the end won't break}
\newcommand*{\getTitleGer}{This is a Long title that I want to stretch the Margin so that instead of 4 lines, it should only be 3 lines, and the logo at the end won't break}
\newcommand*{\getAuthor}{Author}
\newcommand*{\getDoctype}{Thesis}
\newcommand*{\getSupervisor}{Faculty Professor}
\newcommand*{\getAdvisor}{Faculty Advisr}
\newcommand*{\getSubmissionDate}{\today}
\newcommand*{\getSubmissionLocation}{Somewhere In between}

\begin{document}

\begin{titlepage}
  \centering

    \includegraphics[height=20mm]{example-image-a}
  

  \vspace{5mm}
  {\huge\MakeUppercase{School of \getSchool{} --- \getFaculty{}} \par}

  \vspace{5mm}
  {\large\MakeUppercase{\getUniversity{}} \par}

  \vspace{20mm}
  % \vspace{6mm}
  {\Large \getDoctype{} in \getDegree{} \par}

  \vspace{15mm}
  % \vspace{4mm}
  {\huge\bfseries \getTitle{} \par}

  \vspace{5mm}
  {\huge\bfseries \foreignlanguage{ngerman}{\getTitleGer{}} \par}

  \vspace{10mm}
  \begin{tabular}{l l}
    Author:          & \getAuthor{}         \\
    Supervisor:      & \getSupervisor{}     \\
    Advisors:         & \getAdvisor{}        \\
    Submission Date: & \getSubmissionDate{} \\
  \end{tabular}
  
  
    \vfill{}
    \includegraphics[height=15mm]{example-image-b}
  
\end{titlepage}



\end{document}

Eu tenho duas perguntas:

  1. Existe uma maneira de aumentar a margem da linha da parte \getTitle{}? Quero manter o tamanho da fonte e a especificação do vspace{}. À medida que o título fica mais longo, ele tende a se dividir em 3-4 linhas muito rapidamente. Quero esticá-lo para obter cerca de 2 a 3 linhas.

  2. Caso o título seja muito longo, a parte de autoria e o final faculty_logo(Imagem Exemplo B no trecho de código) iriam para a próxima página. Existe uma maneira de sempre corrigir esses dois componentes na parte inferior da página sem passar para a próxima página?

No geral, quero 2 títulos, cada um com 3 linhas do mesmo comprimento de texto definido no trecho de código, e tudo deve permanecer na mesma página.

Responder1

Provavelmente, uma macro é suficiente para produzir um \parboxque se destaca nas margens:

\documentclass[headsepline,footsepline,footinclude=false,oneside,fontsize=11pt,paper=a4,listof=totoc,bibliography=totoc]{scrbook} % one-sided

%---------------------------------------------------------
\newsavebox\scratchbox
\newcommand\boxIntoMargins[4]{%
  \savebox\scratchbox{%
     \mbox{%
       \kern-\dimexpr(#1)\relax
       \parbox[b]{\dimexpr((#1)+(#2)+(#3))\relax}{#4}%
     }%
  }%
  \wd\scratchbox=\linewidth
  \usebox\scratchbox
}%
%---------------------------------------------------------


\usepackage{graphicx}
\usepackage[ngerman,american]{babel}
\newcommand*{\getUniversity}{University of Earth}
\newcommand*{\getFaculty}{Engineering Department}
\newcommand*{\getDegree}{Computer Science}
\newcommand*{\getSchool}{School of Public Science}
\newcommand*{\getTitle}{%
  \boxIntoMargins{1.5cm}{\linewidth}{1.5cm}{%
    \centering
    This is a Long title that I want to stretch the Margin so that instead of 4 lines, it should only be 3 lines, and the logo at the end won't break%
  }%
}
\newcommand*{\getTitleGer}{%
  \boxIntoMargins{1.5cm}{\linewidth}{1.5cm}{%
    \centering
    This is a Long title that I want to stretch the Margin so that instead of 4 lines, it should only be 3 lines, and the logo at the end won't break%
  }%
}
\newcommand*{\getAuthor}{Author}
\newcommand*{\getDoctype}{Thesis}
\newcommand*{\getSupervisor}{Faculty Professor}
\newcommand*{\getAdvisor}{Faculty Advisr}
\newcommand*{\getSubmissionDate}{\today}
\newcommand*{\getSubmissionLocation}{Somewhere In between}

\begin{document}

\begin{titlepage}
  \centering

    \includegraphics[height=20mm]{example-image-a}
  

  \vspace{5mm}
  {\huge\MakeUppercase{School of \getSchool{} --- \getFaculty{}} \par}

  \vspace{5mm}
  {\large\MakeUppercase{\getUniversity{}} \par}

  \vspace{20mm}
  % \vspace{6mm}
  {\Large \getDoctype{} in \getDegree{} \par}

  \vspace{15mm}
  % \vspace{4mm}
  {\huge\bfseries \getTitle{} \par}

  \vspace{5mm}
  {\huge\bfseries \foreignlanguage{ngerman}{\getTitleGer{}} \par}

  \vspace{10mm}
  \begin{tabular}{l l}
    Author:          & \getAuthor{}         \\
    Supervisor:      & \getSupervisor{}     \\
    Advisors:         & \getAdvisor{}        \\
    Submission Date: & \getSubmissionDate{} \\
  \end{tabular}
  
  
    \vfill{}
    \includegraphics[height=15mm]{example-image-b}
  
\end{titlepage}

\end{document}

Captura de tela da compilação usando Overleaf:

insira a descrição da imagem aqui



Em um comentário suplementar, foi levantada a seguinte questão:

Esqueci de ajustar o valor padrão do modelo novamente. A altura da imagem b deve ser de 20mm, que ainda quebra para a segunda página. Existe uma maneira de mantê-lo sempre em uma página?

O autor da versão inicial desta resposta supõe que não há como manter sempre as coisas em uma única página, pois a condição de ter muito texto para caber em uma única página sempre pode ser atendida apenas com mais texto. ;-) E ele acha que tentar automatizar os ajustes para aumentar a chance de caber as coisas em uma única página pode não valer a pena.

Você provavelmente poderia colocar o conteúdo da página de título em um local separado, \newsaveboxonde as coisas podem exceder as medidas do papel e combinar o uso do comando \scaleboxdo pacote graphicxs e o comando \useboxpara reduzir a caixa para caber no papel.

Ou tenha a página de título em um documento .tex separado, a partir do qual um arquivo .pdf separado será criado, que por sua vez será incluído em seu documento principal, por meio \includegraphicsdo qual a redução para caber no tamanho do papel do documento principal pode ser feito. Dentro do documento .tex separado, uma caixa contendo a página de título que excede as medidas do papel do seu documento é enviada após o ajuste do \(pdf)pagewidthe \(pdf)pageheight.
O que se segue pode ser um esboço de como abordar o assunto desta forma:

\documentclass{article}
\newbox\BoxWithTitlepage
\newcommand\ShipoutAsPage[1]{%
  \begingroup
  \setbox\BoxWithTitlepage=\vbox{%
    \hrule height 0pt
    #1\ifvmode\else\expandafter\endgraf\fi
    \hrule height 0pt
  }%
  \csname @ifundefined\endcsname{pagewidth}{}{\pagewidth=\wd\BoxWithTitlepage}%
  \csname @ifundefined\endcsname{pdfpagewidth}{}{\pdfpagewidth=\wd\BoxWithTitlepage}%
  \csname @ifundefined\endcsname{pageheight}{}{\pageheight=\ht\BoxWithTitlepage
                                               \advance\pageheight\dp\BoxWithTitlepage}%
  \csname @ifundefined\endcsname{pdfpageheight}{}{\pdfpageheight=\ht\BoxWithTitlepage
                                                  \advance\pdfpageheight\dp\BoxWithTitlepage}%
  \shipout\vbox{\kern-1truein\hbox{\kern-1truein\box\BoxWithTitlepage}}%
  \endgroup  
}%
\begin{document}
\ShipoutAsPage{%
  % Content of your titlepage
  % Content of your titlepage
  % Content of your titlepage
  % Content of your titlepage
}%
\end{document}

Mas há boas razões pelas quais isso não pode ser realmente recomendado:

  • Dessa forma, você não poderá facilmente ter hiperlinks da página de título para algum outro local do documento.
  • O dimensionamento não ficará bem porque as fontes não estão mais em seus tamanhos naturais.
  • Regras/linhas, por exemplo, de tabelas ou de imagens criadas com o tikzpictureambiente e similares podem ficar muito finas ao dimensionar coisas para tamanhos menores e, portanto, podem não ser imprimíveis.

Portanto, provavelmente seria melhor ajustar as coisas "manualmente", por exemplo, ampliando um pouco a área de texto da página de título na parte inferior do papel e também kerning um pouco para cima. O seguinte é uma solução "rápida e suja", mas provavelmente pode cumprir o propósito:

\documentclass[headsepline,footsepline,footinclude=false,oneside,fontsize=11pt,paper=a4,listof=totoc,bibliography=totoc]{scrbook} % one-sided

%---------------------------------------------------------
\newsavebox\scratchbox
\newcommand\boxIntoMargins[4]{%
  \savebox\scratchbox{%
     \mbox{%
       \kern-\dimexpr(#1)\relax
       \parbox[b]{\dimexpr((#1)+(#2)+(#3))\relax}{#4}%
     }%
  }%
  \wd\scratchbox=\linewidth
  \usebox\scratchbox
}%
%---------------------------------------------------------


\usepackage{graphicx}
\usepackage[ngerman,american]{babel}
\newcommand*{\getUniversity}{University of Earth}
\newcommand*{\getFaculty}{Engineering Department}
\newcommand*{\getDegree}{Computer Science}
\newcommand*{\getSchool}{School of Public Science}
\newcommand*{\getTitle}{%
  \boxIntoMargins{1.5cm}{\linewidth}{1.5cm}{%
    \centering
    This is a Long title that I want to stretch the Margin so that instead of 4 lines, it should only be 3 lines, and the logo at the end won't break%
  }%
}
\newcommand*{\getTitleGer}{%
  \boxIntoMargins{1.5cm}{\linewidth}{1.5cm}{%
    \centering
    This is a Long title that I want to stretch the Margin so that instead of 4 lines, it should only be 3 lines, and the logo at the end won't break%
  }%
}
\newcommand*{\getAuthor}{Author}
\newcommand*{\getDoctype}{Thesis}
\newcommand*{\getSupervisor}{Faculty Professor}
\newcommand*{\getAdvisor}{Faculty Advisr}
\newcommand*{\getSubmissionDate}{\today}
\newcommand*{\getSubmissionLocation}{Somewhere In between}

\begin{document}

\begin{titlepage}
  \enlargethispage{1cm}%
  \hrule height 0mm
  \kern-.5cm

  \centering

    \includegraphics[height=20mm]{example-image-a}
  

  \vspace{5mm}
  {\huge\MakeUppercase{School of \getSchool{} --- \getFaculty{}} \par}

  \vspace{5mm}
  {\large\MakeUppercase{\getUniversity{}} \par}

  \vspace{20mm}
  % \vspace{6mm}
  {\Large \getDoctype{} in \getDegree{} \par}

  \vspace{15mm}
  % \vspace{4mm}
  {\huge\bfseries \getTitle{} \par}

  \vspace{5mm}
  {\huge\bfseries \foreignlanguage{ngerman}{\getTitleGer{}} \par}

  \vspace{10mm}
  \begin{tabular}{l l}
    Author:          & \getAuthor{}         \\
    Supervisor:      & \getSupervisor{}     \\
    Advisors:         & \getAdvisor{}        \\
    Submission Date: & \getSubmissionDate{} \\
  \end{tabular}
  
  
    \vfill{}
    \includegraphics[height=20mm]{example-image-b}
  
\end{titlepage}

\end{document}

insira a descrição da imagem aqui

Caso a proporção ⟨altura da margem superior⟩:⟨altura da margem inferior⟩ não seja 1: 1, talvez seja necessário fazer um pouco mais de cálculo para garantir que, com o kerning vertical para cima enquanto aumenta a área de tipo para baixo, essa proporção ainda está preservado.

Caso a proporção ⟨largura da margem à esquerda⟩:⟨largura da margem à direita⟩ não seja 1: 1, talvez seja necessário fazer um pouco mais de cálculo para garantir que com

\boxIntoMargins{<amount of horizontal space that sticks into left margin>}%
               {\linewidth}%
               {<amount of horizontal space that sticks into right margin>}%
               {...}%

essa proporção é preservada.


Provavelmente, com a linha,
{\huge\MakeUppercase{School of \getSchool{} --- \getFaculty{}} \par}
pode parecer bom quando as coisas são organizadas de modo que, no caso de uma quebra de linha ocorrer logo antes do primeiro travessão, e toda a string que denota a faculdade caiba em uma única linha por conta própria. um travessão é anexado atrás \getFaculty{}para que a sequência do corpo docente seja aninhada entre dois travessões. ;-)


Aliás: o código do seu exemplo me lembraPágina de rosto e página de título com scrbook com página vazia indesejada após a página de título. Provavelmente você encontrará alguns insights úteis lá.

informação relacionada