PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit dem Seitenrand bei der Erstellung von Spielkarten



kalas
15-08-2021, 22:28
Hallo an alle,

ich habe folgendes Problem: Ich will Spielkarten gestalten und – von einem professionellen Service – ausdrucken lassen. Ich bin schon recht weit, habe aber ein Problem mit den notwendigen Seitenrändern:

1) Spielkartengestaltung: Ich folge den – eindrucksvollen – Anweisungen von dexteritas in diesem Stack-Overflow-Thread (https://tex.stackexchange.com/questions/47924/creating-playing-cards-using-tikz). (Das unten stehende – mehr oder weniger – Minimalbeispiel entspricht, mit kleineren Änderungen, seinem zusammengefassten Code.)
2) Drucken: Ich will mir die Karten von einem Online-Service ausdrucken lassen. Hier stehen die Anweisungen: Gestaltungsregeln von meinspiel.de (https://www.meinspiel.de/blog/gestaltungsleitfaden-spielkarten-format-59x91-mm/). Danach ist der gestaltbare Bereich 51*83 mm, dazu kommt ein Kartenrand von 4 mm und eine Beschnittzugabe von 3 mm.

In meinem MWE (siehe unten) sind Seitengröße und die 3 Milimeter Beschnitttzugabe kein Problem (ich habe das mit dem geometry-Paket gemacht). Wenn ich allerdings noch die weiteren 4 Milimeter hinzufügen will, treten Probleme auf (die Karte ist nicht mehr zentriert, sondern verschiebt sich nach rechts unten). Dies passiert sowohl, wenn ich die Seitengröße verringere, die Margin erhöhe oder in den geometry-Optionen einen zusätzlichen Offset von 4 Milimeter einfüge).

Ich vermute, dass die Gründe irgendwo im Bereich "TikZ/PGF Settings für die Karten" des MWE liegen – aber da verlassen mich meine LaTeX-Kenntnisse. (Ich habe etwas herumprobiert, aber keinen Zufallstreffer gelandet.) Kann mir jemand weiterhelfen? (Schon jetzt: Tausend Dank!)

Herzlich
Peter

Hier ist ein Arbeitsbeispiel, das wohl nicht wirklich minimal ist (ich weiß allerdings nicht, was ich noch gefahrlos hätte entfernen können). Die Kommentare sind teils von mir, primär aber vom Coder. Zur Gestaltung der Karte muss das beigefügte (freie) Bild (oder natürlich ein anderes) eingefügt werden. (Edit: Ich bin eventuell – ganz sicher bin ich mir nicht – zu blöd, das Bild hochzuladen. Letztlich müsste aber jedes jpg-Bild im Arbeitsordner gehen; meines heißt erlkoenig-frei.jpg.)


[CODE]
%https://tex.stackexchange.com/questions/47924/creating-playing-cards-using-tikz
\documentclass{article}
\usepackage{geometry}
\geometry{
paperwidth=65mm,
paperheight=97mm,
%offset=4mm,
margin=3mm
}
\usepackage{tikz}
\usetikzlibrary{shadows}
\usepackage{fourier-orns}

\definecolor{titlebg}{cmyk}{0,0,0,1}
\definecolor{bg1}{cmyk}{0,1,1,0.07}
\definecolor{pricebg}{cmyk}{0,.22,1.00,.10}
\definecolor{contentbg}{cmyk}{0,0,0,0}

% TikZ/PGF Settings für die Karten
\pgfmathsetmacro{\cardwidth}{5.9}
\pgfmathsetmacro{\cardheight}{9.1}
\pgfmathsetmacro{\imagewidth}{\cardwidth}
\pgfmathsetmacro{\imageheight}{0.75*\cardheight}
\pgfmathsetmacro{\stripwidth}{0.7}
\pgfmathsetmacro{\strippadding}{0.2}
\pgfmathsetmacro{\textpadding}{0.1}
\pgfmathsetmacro{\titley}{\cardheight-\strippadding-1.5*\textpadding-0.5*\stripwidth}


% Formen der einzelnen Kartenelemente/-bestandteile
\def\shapeCard{(0,0) rectangle (\cardwidth,\cardheight)}
%Ohne Kasten:
%\def\shapeCard{(0,0) [draw=none] rectangle (\cardwidth,\cardheight)}
\def\shapeLeftStripLong{(\strippadding,-0.2) rectangle (\strippadding+\stripwidth,\cardheight-\strippadding-\strippadding-1)}
\def\shapeLeftStripShort{(\strippadding,\cardheigh t-\strippadding-1) rectangle (\strippadding+\stripwidth,\cardheight+0.2)}
\def\shapeRightStripShort{(\cardwidth-\stripwidth-\strippadding,\cardheight-\strippadding-1) rectangle (\cardwidth-\strippadding,\cardheight+0.2)}
\def\shapeTitleArea{(2*\strippadding+\stripwidth,\ cardheight-\strippadding) rectangle (\cardwidth-2*\strippadding-\stripwidth,\cardheight-2*\stripwidth)}
\def\shapeContentArea{(2*\strippadding+\stripwidth ,0.53*\cardheight) rectangle (\cardwidth+0.2,-0.2)}


% Stylings für die Elemente definieren
\tikzset{
% runde Ecken für die Karten
cardcorners/.style={
rounded corners=0.5cm
},
% runde Ecken für die "Fähnchen"
elementcorners/.style={
rounded corners=0.1cm
},
% Schlagschatten für die "Fähnchen"
stripshadow/.style={
drop shadow={
opacity=.5,
shadow,
color=black
}
},
% Style für die "Fähnchen"
strip/.style={
elementcorners,
stripshadow
},
% Bild für das Kartenmotiv
cardimage/.style={
path picture={
\node[below=-1.5mm] at (0.5*\cardwidth,\cardheight) {
\includegraphics[width=\imagewidth cm]{#1}
};
}
},
}

% Hintergrund der Karte
\newcommand{\cardbackground}[1]{
\draw[cardcorners, cardimage=#1] \shapeCard;
}

% Kategorie der Karte
\newcommand{\cardtype}[3]{
% First we fill the intersecting area. The \clip command does not allow options, therefore we have to use a scope to set the even odd rule.
\begin{scope}[even odd rule]
% Define a clipping path. All paths outside shapeCard will be cut because the even odd rule is set.
\clip[cardcorners] \shapeCard;
% Fill shapeLeftStripLong and shapeLeftStripShort. Since the even odd rule is set, only the card will be filled.
\fill[strip,#1] \shapeLeftStripLong node[rotate=90,above left=0.9mm,font=\normalsize] {
\color{white}\uppercase{#2}
};
\fill[strip,#1] \shapeLeftStripShort;
\end{scope}

\node at (\strippadding+\stripwidth-0.28,\cardheight-\strippadding-\strippadding-0.37) {\color{white}#3};
}
\newcommand{\cardtypeTEST}{\cardtype{bg1}{Test}{\h space{-1mm}\LARGE\bomb}}

% Titel der Karte
\newcommand{\cardtitle}[1]{
%\draw[pattern=soft crosshatch,rounded corners=0.1cm] \shapeTitleArea;
\fill[elementcorners,titlebg,opacity=.65] \shapeTitleArea;
\node[text width=3.75cm] at (0.5*\cardwidth,\titley) {
\begin{center}
\color{white}\uppercase{\normalsize #1}
\end{center}
};
}

% Inhalt der Karte
\newcommand{\cardcontent}[2]{
\begin{scope}[even odd rule]
\clip[cardcorners] \shapeCard;
\fill[elementcorners,contentbg] \shapeContentArea;
\end{scope}
\node[below right, text width=(\cardwidth-2*\strippadding-\stripwidth-2*\textpadding-0.3)*1cm] at (2*\strippadding+\stripwidth+\textpadding,0.5*\car dheight-\textpadding) {
\textit{\glqq\normalsize #1\grqq}
};
\node[below right, text width=(\cardwidth-2*\strippadding-\stripwidth-2*\textpadding-0.3)*1cm] at (2*\strippadding+\stripwidth+\textpadding,3) {
\vrule width \textwidth height 2pt \\[-2pt]
\vspace{0.2cm}
{\scriptsize #2}
};
}

% Preis der Karte
\newcommand{\cardprice}[1]{
\begin{scope}[even odd rule]
\clip[cardcorners] \shapeCard;
\fill[strip,pricebg] \shapeRightStripShort;
\end{scope}
\node at (\cardwidth-0.5*\stripwidth-\strippadding,\titley-0.1) {\color{black}#1};
}



%Nach https://tex.stackexchange.com/questions/140168/how-to-remove-a-blank-page-before-the-title-page, entfernt leere erste Seite.
\usepackage{atbegshi}% http://ctan.org/pkg/atbegshi
\AtBeginDocument{\AtBeginShipoutNext{\AtBeginShipo utDiscard}}

\begin{document}\sloppy
\centering
\pagestyle{empty}

\begin{tikzpicture}
\cardbackground{./erlkoenig-frei.jpg}
\cardtypeTEST
\cardtitle{Der Test}
\cardcontent{Tja. Was für ein verhunztes Minimalbeispiel!}{Anweisung:\\[5pt]Ziehe 2 Karten, nimm 3 Gold, lege alles ab, lauf weg …}
\cardprice{20}
\end{tikzpicture}
\end{document}

rais
16-08-2021, 21:52
Moin moin,

Ehre, wem Ehre gebührt...Dein Code wurde von Arvid auf Stack-Overflow erstellt, dexteritas hat da rund 4 Jahre später nur was dran editiert.

Wie dem auch sei, wenn ich die shadow-Option beim drop shadow rausnehme (was in den Kommentaren zu diesem Code auf Stack-Overflow bereits erwähnt wurde) und dann noch babel mit ngerman-Option ergänze, damit die innerhalb \cardcontent verwendeten \glqq/\grqq-Befehle auch funktionieren, kann ich Dein Beispiel zumindest fehlerfrei durchlaufen lassen.

Wenn ich das richtig sehe, brauchst Du eigentlich nur \cardwidth und \cardheight mit an Deine Vorgabe von 51 mm x 83 mm anzupassen, dann kannst Du auch den margin von 3 mm auf 7 mm erhöhen:


%https://tex.stackexchange.com/questions/47924/creating-playing-cards-using-tikz
\documentclass{article}
\usepackage{geometry}
\geometry{
paperwidth=65mm,
paperheight=97mm,
margin=7mm
}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{shadows}
\usepackage{fourier-orns}

\definecolor{titlebg}{cmyk}{0,0,0,1}
\definecolor{bg1}{cmyk}{0,1,1,0.07}
\definecolor{pricebg}{cmyk}{0,.22,1.00,.10}
\definecolor{contentbg}{cmyk}{0,0,0,0}

% TikZ/PGF Settings für die Karten
\pgfmathsetmacro{\cardwidth}{5.1}
\pgfmathsetmacro{\cardheight}{8.3}
\pgfmathsetmacro{\imagewidth}{\cardwidth}
\pgfmathsetmacro{\imageheight}{0.75*\cardheight}
\pgfmathsetmacro{\stripwidth}{0.7}
\pgfmathsetmacro{\strippadding}{0.2}
\pgfmathsetmacro{\textpadding}{0.1}
\pgfmathsetmacro{\titley}{\cardheight-\strippadding-1.5*\textpadding-0.5*\stripwidth}


% Formen der einzelnen Kartenelemente/-bestandteile
\def\shapeCard{(0,0) rectangle (\cardwidth,\cardheight)}
%Ohne Kasten:
%\def\shapeCard{(0,0) [draw=none] rectangle (\cardwidth,\cardheight)}
\def\shapeLeftStripLong{(\strippadding,-0.2) rectangle (\strippadding+\stripwidth,\cardheight-\strippadding-\strippadding-1)}
\def\shapeLeftStripShort{(\strippadding,\cardheigh t-\strippadding-1) rectangle (\strippadding+\stripwidth,\cardheight+0.2)}
\def\shapeRightStripShort{(\cardwidth-\stripwidth-\strippadding,\cardheight-\strippadding-1) rectangle (\cardwidth-\strippadding,\cardheight+0.2)}
\def\shapeTitleArea{(2*\strippadding+\stripwidth,\ cardheight-\strippadding) rectangle (\cardwidth-2*\strippadding-\stripwidth,\cardheight-2*\stripwidth)}
\def\shapeContentArea{(2*\strippadding+\stripwidth ,0.53*\cardheight) rectangle (\cardwidth+0.2,-0.2)}


% Stylings für die Elemente definieren
\tikzset{
% runde Ecken für die Karten
cardcorners/.style={
rounded corners=0.5cm
},
% runde Ecken für die "Fähnchen"
elementcorners/.style={
rounded corners=0.1cm
},
% Schlagschatten für die "Fähnchen"
stripshadow/.style={
drop shadow={
opacity=.5,
% shadow,
color=black
}
},
% Style für die "Fähnchen"
strip/.style={
elementcorners,
stripshadow
},
% Bild für das Kartenmotiv
cardimage/.style={
path picture={
\node[below=-1.5mm] at (0.5*\cardwidth,\cardheight) {
\includegraphics[width=\imagewidth cm]{#1}
};
}
},
}

% Hintergrund der Karte
\newcommand{\cardbackground}[1]{
\draw[cardcorners, cardimage=#1] \shapeCard;
}

% Kategorie der Karte
\newcommand{\cardtype}[3]{
% First we fill the intersecting area. The \clip command does not allow options, therefore we have to use a scope to set the even odd rule.
\begin{scope}[even odd rule]
% Define a clipping path. All paths outside shapeCard will be cut because the even odd rule is set.
\clip[cardcorners] \shapeCard;
% Fill shapeLeftStripLong and shapeLeftStripShort. Since the even odd rule is set, only the card will be filled.
\fill[strip,#1] \shapeLeftStripLong node[rotate=90,above left=0.9mm,font=\normalsize] {
\color{white}\uppercase{#2}
};
\fill[strip,#1] \shapeLeftStripShort;
\end{scope}

\node at (\strippadding+\stripwidth-0.28,\cardheight-\strippadding-\strippadding-0.37) {\color{white}#3};
}
\newcommand{\cardtypeTEST}{\cardtype{bg1}{Test}{\h space{-1mm}\LARGE\bomb}}

% Titel der Karte
\newcommand{\cardtitle}[1]{
%\draw[pattern=soft crosshatch,rounded corners=0.1cm] \shapeTitleArea;
\fill[elementcorners,titlebg,opacity=.65] \shapeTitleArea;
\node[text width=3.75cm] at (0.5*\cardwidth,\titley) {
\begin{center}
\color{white}\uppercase{\normalsize #1}
\end{center}
};
}

% Inhalt der Karte
\newcommand{\cardcontent}[2]{
\begin{scope}[even odd rule]
\clip[cardcorners] \shapeCard;
\fill[elementcorners,contentbg] \shapeContentArea;
\end{scope}
\node[below right, text width=(\cardwidth-2*\strippadding-\stripwidth-2*\textpadding-0.3)*1cm] at (2*\strippadding+\stripwidth+\textpadding,0.5*\car dheight-\textpadding) {
\textit{\glqq\normalsize #1\grqq}
};
\node[below right, text width=(\cardwidth-2*\strippadding-\stripwidth-2*\textpadding-0.3)*1cm] at (2*\strippadding+\stripwidth+\textpadding,3) {
\vrule width \textwidth height 2pt \\[-2pt]
\vspace{0.2cm}
{\scriptsize #2}
};
}

% Preis der Karte
\newcommand{\cardprice}[1]{
\begin{scope}[even odd rule]
\clip[cardcorners] \shapeCard;
\fill[strip,pricebg] \shapeRightStripShort;
\end{scope}
\node at (\cardwidth-0.5*\stripwidth-\strippadding,\titley-0.1) {\color{black}#1};
}



%Nach https://tex.stackexchange.com/questions/140168/how-to-remove-a-blank-page-before-the-title-page, entfernt leere erste Seite.
\usepackage{atbegshi}% http://ctan.org/pkg/atbegshi
\AtBeginDocument{\AtBeginShipoutNext{\AtBeginShipo utDiscard}}

\begin{document}\sloppy
\centering
\pagestyle{empty}

\begin{tikzpicture}
\cardbackground{./erlkoenig-frei.jpg}
\cardtypeTEST
\cardtitle{Der Test}
\cardcontent{Tja. Was für ein verhunztes Minimalbeispiel!}{Anweisung:\\[5pt]Ziehe 2 Karten, nimm 3 Gold, lege alles ab, lauf weg …}
\cardprice{20}
\end{tikzpicture}
\end{document}

BTW: die offset-Option beim geometry-Paket wirkt sich nur auf linken und oberen Rand aus, AFAIK.

VG

kalas
16-08-2021, 22:15
Super, das war es - herzlichen Dank! (Ich hatte beides probiert – intelligenterweise aber nie zusammen.)


Ehre, wem Ehre gebührt...Dein Code wurde von Arvid auf Stack-Overflow erstellt, dexteritas hat da rund 4 Jahre später nur was dran editiert.


Aber sowas von! Danke für den Hinweis – und auf diesem Weg zumindest indirekt auch an Arvid für seine Arbeit.