Personalización automática de la portada de diferentes memorias

Personalización automática de la portada de diferentes memorias

Necesito crear varias memorias con el mismo formato. Para cada documento quiero personalizar varias características de la portada, por ejemplo el color de fondo. Estoy intentando automatizar la personalización de las portadas definiendo en el preámbulo de los documentos una variable \doctypeque codifica el tipo de documento (digamos tipo uno o tipo dos) y usando el \IfStrEqCasecomando para asignar el tipo de documento al color apropiado. . Este es mi MWE simplificado:

miplantilla.tex

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

micubierta.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}

Esperaba que la portada fuera doc1roja y la portada fuera doc2verde, pero aparece este error:

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

? 

¿Que me estoy perdiendo aqui?

Respuesta1

El problema es que \CoverBackgroundColoresonoexpandirse a un color, sino a un conjunto de instrucciones paraimpresiónun nombre de color.

Reemplace el código mycover.texen

%%% 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
%%%

noquiero hacer \include{mytemplate}. Usar \input.

información relacionada