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, \doctype
die den Dokumenttyp kodiert (sagen wir Typ eins oder Typ zwei), und den \IfStrEqCase
Befehl 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 doc1
rot und das Cover von doc2
grü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, \CoverBackgroundColor
dassnichterweitern auf eine Farbe, sondern auf eine Reihe von Anweisungen fürDruckenein Farbname.
Ersetzen Sie den Code mycover.tex
durch
%%% 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
.