我正在尝试使用 Tikz 在 LaTeX 中创建封面(提供的示例非常简单,但目标是拥有更详细的封面)。我正在使用 PDFLaTeX。
我必须使用环境overlay
上的选项tikzpicture
才能将元素放置在整个页面上。但这似乎不起作用。如果我不使用tikze外部化,那么它工作正常,但我无法缓存封面页,每次都必须重新编译。如果我不使用overlay
它,页面就不会按应有的方式呈现。
以下是源代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{anyfontsize}
\usetikzlibrary{external}
\tikzexternalize[prefix=figures/]
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}[overlay, remember picture]
% Background color
\fill[black!2] (current page.south west) rectangle (current page.north east);
% Title
\node[align=center] at ($(current page.center)+(0,-5)$){
{\fontsize{60}{72} \selectfont {{Title of the Report}}} \\[1cm]
{\fontsize{16}{19.2} \selectfont \textcolor{orange}{ \bf Author Name}}\\[3pt]
Company Name\\[3pt]
Address
};
\end{tikzpicture}
\end{document}
以下是我获得的 pdf 输出:
从左到右,图像对应以下设置:
overlay
已启用、tikzexternalize
已禁用(想要输出,但不缓存)overlay
已启用,tikzexternalize
已启用(一切都消失了……)overlay
禁用tikzexternalize
启用(已缓存,但格式不正确)
有没有什么办法可以解决这个问题?我应该提一下人物目录已经存在,我-shell-escape
在编译时使用。
答案1
对于此示例,最好不要使用 externalize。请参阅最后的注释。
我建议采取两步流程:
(1)生成背景图像。或者放入一张已有的漂亮图像(尺寸与纸张相同,以填满整个页面)。
(2)使用已经生成的背景制作标题页,添加该文档的具体标题。
这总体效果与外化相同,因为背景图像只会生成一次,并且可以在其他文档中重复使用。
这是TitleBackground.tex
它将生成一个浅蓝色矩形,大小与物理页面相同。您可以添加徽标和其他以后不会更改的文本。先运行它。
%% TitleBackground
% !TeX TS-program = pdflatex
\documentclass{article}
\usepackage{tikz}
\begin{document}
\thispagestyle{empty} % Suppress headers and footers
\begin{tikzpicture}[remember picture, overlay]
\node [anchor=center, inner sep=0cm, rectangle, fill=blue!10!white, fill opacity=0.6, text opacity=1, minimum height=\paperheight, minimum width=\paperwidth, text width=\paperwidth] at (current page.center) {};
\end{tikzpicture}
\end{document}
这是main.tex
对的重新定义,\titlepage
以合并背景并在居中的深蓝色矩形中插入标题、作者等。
%% File main.tex
% !TeX TS-program = pdflatex
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[T1]{fontenc}
%**************************************** added <<<<<<<<<<
\renewcommand{\titlepage}[2]{%
\thispagestyle{empty} % Suppress headers and footers on the title page
\begin{tikzpicture}[remember picture, overlay]
\node [inner sep=0pt] at (current page.center) {#1}; % insert the background image
\node [anchor=center, inner sep=2.0cm, rectangle, fill=blue!30!white, fill opacity=0.6, text opacity=1, minimum height=0.3\paperheight, minimum width=\paperwidth, text width=0.8\paperwidth] at (current page.center) {#2}; % Highlight box with title and author
\end{tikzpicture}
\newpage
\setcounter{page}{1} %start on page 1
}
%****************************************
\begin{document}
\titlepage % output the title page
{\includegraphics[width=\paperwidth]{TitleBackground.pdf}} %
{ % Title(s) and author(s)
\centering\sffamily %
{\Huge\bfseries Title of the Report\par} % % Report title
\vspace{20pt} % vertical space
{\LARGE \textcolor{orange}{Author Name}\par} % % Author
\vspace{60pt} % vertical space
{\huge\bfseries Company Name\par} % Company
\vspace{20pt}
{\large\bfseries Address\par} % Company
}
\section{One}
Some text.
\end{document}
评论在 externalize 上。如果您的文档包含许多 tikz 图形,这是一个非常有用的工具。由于它将生成每个图形一次,因此后续运行将快得多。图形将从已生成的.pdf
正确插入点插入。
这是标题页的问题。背景图生成正确,但插入的位置是文本区域第一行的原点,而不是页面的左上角。
答案2
这是生成图像的独立程序(名为 figure.pdf)。
\documentclass[class=article]{standalone}
\usepackage{tikz}
\usepackage{anyfontsize}
\begin{document}
\begin{tikzpicture}
% Background color
\fill[black!20] (0,0) rectangle (\paperwidth, \paperheight);
% Title
\node[align=center] at (0.5\paperwidth,0.5\paperheight-5cm){
{\fontsize{60}{72} \selectfont {{Title of the Report}}} \\[1cm]
{\fontsize{16}{19.2} \selectfont \textcolor{orange}{ \bf Author Name}}\\[3pt]
Company Name\\[3pt]
Address
};
\end{tikzpicture}
\end{document}
这会使用 TikZ 和 将图像添加到文档中\AddToHookNext
。唯一的区别是 TikZ 需要运行两次。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}[remember picture, overlay]
\node at (current page.center){\includegraphics{figure.pdf}};
\end{tikzpicture}
\newpage
\AddToHookNext{shipout/background}{\put(0pt,-\paperheight){\includegraphics{figure.pdf}}}
\null\newpage
\end{document}