我正在根据我所在大学的要求实现一个论文模板。我希望在标题页中留出三个徽标的空间,一个大徽标在中间,两个较小的徽标在两边。但是,为了保持模板足够灵活,我想让用户有机会只使用一个(或两个)徽标。我通过以下方式实现了这一点
\renewcommand{\maketitle}{\begin{titlepage}
\centering
\hfill
\ifx \@smallLogoLeft \@empty
\else
\includegraphics[width=3cm,height=3cm]{\@smallLogoLeft}
\fi
\hfill
\ifx \@LogoCenter \@empty
\else
\includegraphics[width=8cm,height=3cm]{\@LogoCenter}
\fi
\hfill
\ifx \@smallLogoRight \@empty
\else
\includegraphics[width=3cm,height=3cm]{\@smallLogoRight}
\fi
\hfill
\par
\vspace{1cm}
{\scshape\LARGE \@department \par}
\vspace{2.5cm}
{\huge\bfseries \@title \par}
\vspace{2cm}
{\Large\itshape \@author \par}
\vfill
\@titlepagesentence
\vfill
{\large \@submissiondate \par}
\end{titlepage}}
我认为这是解决问题的幼稚尝试。你们有什么建议可以更稳定地实现它?谢谢!
答案1
随着时间的推移,我发现这个xcoffin
包可以解决我所有的问题,比如如何将东西准确地放在我想要的位置。这在封面设计中非常有用,尤其是论文,因为它们通常有非常严格的要求。
这个想法很简单:将物品放入带有把手的特殊盒子(棺材)中,然后使用这些把手连接棺材(\Join...),并在必要时添加水平或垂直移位。一个棺材,我称之为 Frame,尺寸为零,用作其他棺材的收集器。
这样,如果您注释掉 a,Join
棺材就会从程序集中消失,而不会干扰其他程序集。如果您在 ( Set
) 中不填充任何内容,也会发生同样的事情。和\csr
就是\crl
这样做的。
我定义了\maketitlex
两个可选参数,即左侧和右侧徽标,因此有 4 种可能的结果,如图所示。
请参阅我对类似问题的更完整回答:
我添加了章节、标题和一些文本来模拟更真实的场景。
\documentclass[a4paper]{book}
\usepackage{kantlipsum} %dummy text
\usepackage{xcoffins}
\usepackage{fancyhdr} %
\fancypagestyle{empty}{}
\fancyhf{}
\renewcommand{\headrule}{}
\fancyhead[RE,LO]{\rmfamily \small \nouppercase \leftmark}
\usepackage{graphicx}
\NewCoffin\Frame
\NewCoffin\smallLogoLeft
\NewCoffin\smallLogoRight
\NewCoffin\smallLogoAbove
\NewCoffin\LogoCenter
\NewCoffin\departmentx
\NewCoffin\titlex
\NewCoffin\authorx
\usepackage{xparse}
\NewDocumentCommand{\maketitlex}{ O{} O{} m }{%
\SetHorizontalCoffin\Frame{} % empty before reuse
\csl{#1}%
\csr{#2}%
\SetHorizontalCoffin\LogoCenter{\includegraphics[width=150pt, height=50pt]{#3}}
\SetHorizontalCoffin\departmentx{\scshape\LARGE Department of lost objects}
\SetVerticalCoffin\titlex{\textwidth}{\Huge \sffamily \centering My most fantastic accomplishment \par so far}
\SetHorizontalCoffin\authorx{\Large\itshape Just me}
\JoinCoffins\Frame[hc,vc]\LogoCenter[l,vc](100pt,0pt)
\JoinCoffins*\Frame[\LogoCenter-r,\LogoCenter-vc]\smallLogoRight[l,vc](20pt,0pt)
\JoinCoffins*\Frame[\LogoCenter-l,\LogoCenter-vc]\smallLogoLeft[r,vc](-20pt,0pt)
\JoinCoffins*\Frame[\LogoCenter-hc, \LogoCenter-b]\titlex[hc,vc](0pt,-100pt)
\JoinCoffins*\Frame[\titlex-hc,\titlex-b]\authorx[hc,t](0pt, -40pt)
\JoinCoffins*\Frame[\authorx-hc,\authorx-b]\departmentx[hc,t](0pt, -120pt)
\noindent\TypesetCoffin\Frame(0pt, -100pt)
\cleardoublepage
}
%%https://tex.stackexchange.com/questions/127502/difference-between-if-and-ifx
\newcommand{\csr}[1]{%
\if\relax\detokenize{#1}\relax
\SetHorizontalCoffin\smallLogoRight{}
\else
\SetHorizontalCoffin\smallLogoRight{\includegraphics[width=30pt]{#1}}%
\fi
}
\newcommand{\csl}[1]{%
\if\relax\detokenize{#1}\relax
\SetHorizontalCoffin\smallLogoLeft{}
\else
\SetHorizontalCoffin\smallLogoLeft{\includegraphics[width=30pt]{#1}}
\fi
}
\begin{document}
\pagestyle{empty}
\maketitlex{example-image-A} %only center
\maketitlex[example-image-B][]{example-image-A} %center + left
\maketitlex[][example-image-C]{example-image-A} %center +right
\maketitlex[example-image-B][example-image-C]{example-image-A} %all
\pagestyle{fancy}
\chapter{Introduction}
\kant[1-10]
\end{document}