如何同时使用 \tikzexternalize 和覆盖选项?

如何同时使用 \tikzexternalize 和覆盖选项?

我正在尝试使用 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)使用已经生成的背景制作标题页,添加该文档的具体标题。

总体效果与外化相同,因为背景图像只会生成一次,并且可以在其他文档中重复使用。

A

这是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}

相关内容