Personalização automática da capa de diferentes memórias

Personalização automática da capa de diferentes memórias

Preciso criar várias memórias com o mesmo formato. Para cada documento quero personalizar vários recursos da capa, por exemplo a cor de fundo. Estou tentando automatizar a customização das capas definindo no preâmbulo dos documentos uma variável \doctypeque codifica o tipo de documento (digamos tipo um ou tipo dois) e usando o \IfStrEqCasecomando para mapear o tipo de documento na cor apropriada . Este é o meu MWE simplificado:

meumodelo.tex

\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{xstring}
\usepackage{tikz}
\usepackage{lipsum}

minhacapa.tex

\newcommand\CoverBackgroundColor{%
\IfStrEqCase{\doctype}{
    {one}{red}
    {two}{green}
    [gray]
}}

\begin{tikzpicture}[overlay, remember picture]
\fill[\CoverBackgroundColor] (current page.south west) rectangle (current page.north east);
\end{tikzpicture}
\thispagestyle{empty}
\clearpage

doc1.tex

\documentclass[12pt,a4paper,oneside]{memoir}

\input{mytemplate}
\newcommand{\doctype}{one}

\begin{document}

\input{mycover}
\lipsum[1]

\end{document}

doc2.tex

\documentclass[12pt,a4paper,oneside]{memoir}

\input{mytemplate}
\newcommand{\doctype}{two}

\begin{document}

\input{mycover}
\lipsum[2]

\end{document}

Eu esperava que a capa doc1fosse vermelha e a capa doc2verde, mas estou recebendo este erro:

<to be read again> 
1
l.9 \fill[\CoverBackgroundColor]
                               (current page.south) rectangle (current page....

? 

O que estou perdendo aqui?

Responder1

O problema é que isso \CoverBackgroundColorfaznãoexpandir para uma cor, mas para um conjunto de instruções paraimpressãoum nome de cor.

Substitua o código mycover.texem

%%% mycover.tex
\ExplSyntaxOn
\NewExpandableDocumentCommand\CoverBackgroundColor{}
 {
  \str_case_e:nnF {\doctype}
   {
    {one}{red}
    {two}{green}
   }
   {gray}
 }
\ExplSyntaxOff

\begin{tikzpicture}[overlay, remember picture]
\fill[\CoverBackgroundColor] (current page.south west) rectangle (current page.north east);
\end{tikzpicture}
\thispagestyle{empty}
\clearpage
%%%

Vocênãoquerer fazer \include{mytemplate}. Usar \input.

informação relacionada