Automatisches Anpassen des Covers verschiedener Memoiren

Automatisches Anpassen des Covers verschiedener Memoiren

Ich muss mehrere Memoiren im gleichen Format erstellen. Für jedes Dokument möchte ich mehrere Merkmale des Titelblatts anpassen, beispielsweise die Hintergrundfarbe. Ich versuche, die Anpassung der Titelblätter zu automatisieren, indem ich in der Präambel der Dokumente eine Variable definiere, \doctypedie den Dokumenttyp kodiert (sagen wir Typ eins oder Typ zwei), und den \IfStrEqCaseBefehl verwende, um den Dokumenttyp der entsprechenden Farbe zuzuordnen. Dies ist mein vereinfachtes MWE:

meineVorlage.tex

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

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

Ich hatte erwartet, dass das Cover von doc1rot und das Cover von doc2grün ist, aber ich erhalte diese Fehlermeldung:

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

? 

Was übersehe ich hier?

Antwort1

Das Problem ist, \CoverBackgroundColordassnichterweitern auf eine Farbe, sondern auf eine Reihe von Anweisungen fürDruckenein Farbname.

Ersetzen Sie den Code mycover.texdurch

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

Dunichttun möchten \include{mytemplate}. Verwenden Sie \input.

verwandte Informationen