Formatierung von Schildern.

Schriftbild, Absätze und Auflistungen einstellen


Fabian96

Formatierung von Schildern.

Beitrag von Fabian96 »

Sehr geehrte Forumsmitglieder,
ich habe vor einigen Wochen begonnen mit LaTeX zu arbeiten und habe enormen Gefallen daran gefunden. Leider bin ich an sehr vielen Stellen noch wacklig auf den Beinen und wäre für eure Hilfe sehr dankbar. :D

Meine Aufgabe ist es im moment Beschriftungskärtchen in der Firma zu drucken. Die dafür benötigten Daten habe ich mir als CSV-File aus meiner Datenbank ausgelesen und via Datatool in die .tex Datei eingelesen.

Als Grundlage für den nun folgenden Code, diente eine Vorlage für Visitenkarten die ich im Netz gefunden habe. Hier ist jedoch die Krux, dass nun (wie es natürlich für Vistienkarten gewollt ist) vorerst auf jeder Karte das gleiche steht. Ich hätte jedoch ganz gern, dass für jeden Datensatz im CSV-File genau eine Karte angelegt wird.

An der Stelle kommt ihr ins Spiel - vielleicht kann mir ja einer von euch verraten wie ich den Code noch modifizieren kann, damit es funktioniert.
 
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[pdftex]{graphicx}
\usepackage{textcomp}
\usepackage{qrcode}
\usepackage{datatool}
\usepackage{algorithm2e}
\usepackage{xstring}
\usepackage{xifthen}
\usepackage{xparse}

% Seiten-Layout
\setlength{\textwidth}{7in}
\setlength{\hoffset}{0in}
\setlength{\voffset}{0in}
\setlength{\oddsidemargin}{-.8in}
\setlength{\evensidemargin}{-.8in}
\setlength{\textheight}{10in}
\setlength{\topmargin}{-1in}

% Mit diesem Kommando legt man fest, dass man
% z.B. keine Seitennummerierung haben will.
\pagestyle{empty}

%Messtellenklassifikation in Makro fassen
\newcommand*{\msArt}[1]{%
    \IfStrEqCase{#1}{%
        {M}{\renewcommand{\vBez}{MS-Art 1}}%
        {D}{\renewcommand{\vBez}{MS-Art 2}}%
        {B}{\renewcommand{\vBez}{MS-Art 3}}%
        {T}{\renewcommand{\vBez}{MS-Art 4}}%
    }[{Undefinierte MS-Art}]%
}

% Jetzt geht das eigentliche Dokument los:
\begin{document}



% Wir wollen immer als Einheit Millimeter verwenden.
\setlength{\unitlength}{1mm}

%Lade die entsprechende CSV_Tabelle mit den Messstellendaten
\DTLsetseparator{;}
\DTLloaddb{Messstellen}{Testdaten.csv}

%Setze Standartwert 'Undefiniert' auf Variable um später mit \renewcommand neu besetzen zu können					 
\newcommand{\vBez}{M }
  
	% Diese Kommando legt fest, dass ein Bild der angegebenen
	% Groesse erzeugt werden soll.
	\begin{picture}(178,253)(-7,-1)					 
	% Teile das Blatt in fuenf 51mm hohe,
	% unteineinander liegenden Zeilen.
	%\multiput(0,0)(0,51){5}{
	% Nun wird jede Zeile in zwei 89mm breite
	% Spalten geteilt.
	%\multiput(0,0)(89,0){2}{
	% In die nun erzeugten Kaesten sollen Bilder ``gemalt'' werden,
	% die eine groesse von 51mm mal 89mm haben. Das ist dann die
	% Groesse der Visitenkarten.
	
	\DTLforeach{Messstellen}{\LEIT =LEIT_ID,%
					\aBez =Alt_Bez,%
					\nBez =Neu_Bez,%
					\verBez =verbal_Bezeichnung}{ 
		
	
	\begin{picture}(51,89)(0,0)
						 
		%Setze Linien die das Schild in 4 Bereiche unterteilen
	    \put(50,0){\line(0,1){51}}
		\put(0,25.5){\line(1,0){89}}
		
		
	%Fülle oberes linkes Feld
				
		\put(5,43){\underline{{msArt{\StrLeft{\nBez}{1}} \normalsize}}

		% Definiere die Variable \sLen und Belege sie mit der Länge der verbalen Bezeichnun in mm

		\ifthenelse{\isundefined{\sLen}}%
			%Dann
			{\newlength{\sLen}	%
			 \settowidth{\sLen}{\verBez}}%
			%Sonst
			{\settowidth{\sLen}{\verBez}}
		
		% Prüfe die Länge der verbalen Bezeichnung und ob ein Zeilenumbruch noetig ist
		
		\ifthenelse{\lengthtest{\sLen < 40 mm }}%
				  %Wahr-Bedingung
				  {\renewcommand{\vBez}{\verBez}}%
				  %Falsch-Bedingung
				  {\renewcommand{\vBez}{\StrLeft{\verBez}{7}- \\ \StrMid{\verBez}{7}{30}}}			
		\put(5,34){\textbf{\verBez}}

	%Fülle unteres linkes Feld
	
		\put(5,20){\underline{Bezeichnung} \normalsize}	
		\put(5,10){\LARGE \nBez}
   		\put(5,3){\small \textsf{(Alt : \aBez)} \normalsize}
   		
   	%Fülle oberes rechtes Feld
%		\put(56,28 ) {\includegraphics[scale=0.60]{Logo.jpg}}
%		
%		%Fülle unteres rechtes Feld
%		\put(58,11){\qrset{height=1.5cm}}
%		\put(58,11){\qrcode{\LEIT - \nBez}}

		% AB HIER SOLLTEST DU NICHTS MEHR AENDERN!
		
		% Schnittmarken:
		% oben rechts
		\put(88.5,50.5){\line(-1,0){3}}
		\put(88.5,50.5){\line(0,-1){3}}
		
		% oben links
		\put(0.5,50.5){\line(1,0){3}}
		\put(0.5,50.5){\line(0,-1){3}}
		
		% unten links
		\put(0.5,0.5){\line(1,0){3}}
		\put(0.5,0.5){\line(0,1){3}}
		
		% unten rechts
		\put(88.5,0.5){\line(-1,0){3}}
		\put(88.5,0.5){\line(0,1){3}}
		% ENDE der Schnittmarken
		
		% Jetzt muss noch gesagt werden,
		% dass man mit allem fertig ist:
		
		\end{picture}
		}
		%}}
		\end{picture}
		
\end{document}

% ENDE
Da die Implementierung des Logos funktioniert, verzichte ich mal darauf es hier anzuhängen.

Ich gebe mir jedoch Mühe anonymisierte Testdaten einzustellen.

Ich möchte mich schoneinmal im vorhinein für grobe Programmierfehler entschuldigen und hoffe auf eure Hilfe!

Vielen Dank schonmal im voraus!

Grüße
Fabian

Fabian96

Ergänzung

Beitrag von Fabian96 »

Ich habe es leider nicht geschafft, hier eine Beispieldatei hochzuladen..

Die CSV besteht jedoch aus den Spalten LEIT_ID;Alt_Bez;Neu_Bez;verbal_Bezeichnung

ich bitte um Verständniss.

LEIT_ID Alt_Bez Neu_Bez verbal_Bezeichnung

30005 B 0012 M 3452 0 0E 0 Datensatz 1
30006 D 5002 M 8967 0 0E 0 Datensatz 2
306 M 9986 M 7892 0 XX 0 Datensatz 3
308 D 8752 D 5821 0 XX 0 Datensatz 4
309 T 0036 M 8897 0 09 0 Datensatz 5

Ratgeber

Abhilfe schaffen

Beitrag von Ratgeber »

Fabian96 hat geschrieben:Ich habe es leider nicht geschafft, hier eine Beispieldatei hochzuladen.. […]
Das ist als Gast auch nicht möglich. Entweder Du registrierst dich hier oder Du benutzt einen Filehoster (z.B. »Abload« oder »FileHorst«) und gibst hier den entsprechenden Link an.

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

%Fülle oberes linkes Feld
           
      \put(5,43){\underline{{msArt{\StrLeft{\nBez}{1}} \normalsize}}
Die öffnende geschweifte Klammer vor msArt ist zu viel.

Für Testdaten mit überschaubarer Zeilenanzahl bietet sich die Alternative im Beispiel an.

Fabian96
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 30. Jun 2019, 13:19

Testdaten

Beitrag von Fabian96 »

Ich habe mich mal eben fix angemeldet, jetzt hab ich ja Zugriff auf meine private Mail.

@Bartman vielen Dank für den Tipp, den werde ich Montag sofort einarbeiten.

Ich habe nun auch die Testdaten als Excel-Datei anhängen können.( Bitte einfach auf dem eigenen PC als CSV abspeichern. Ein direkter Upload wurde mir vom Forenfiltere untersagt)

Mein prinzipielles Problem ist die Darstellung. Es sollen pro 'Visitenkarte' die Daten von einer Datensatzzeile verarbeitet und abgebildet werden. Könnt ihr mir da weiterhelfen?

Mit freundlichen Grüßen
Forenneuling Fabian
Dateianhänge
Testdaten.xls
(26 KiB) 180-mal heruntergeladen

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Eine csv-Datei enthält Text und txt-Dateien werden hier als Anhang zugelassen. Für Deine wenigen Zeilen genügt mein Vorschlag.

Es gibt für Deine bedingten Befehle weitere Möglichkeiten:
  • Mit etoolbox können die jeweils zwei Befehle zu einem verkürzt werden.
  • Wenn Du die vorhandenen Bedingungsprüfungen durch
    \ifdefined\sLen dann \else sonst\fi

    und
    \ifdim\sLen<40mm wahr \else falsch\fi


    ersetzt, kommst Du ohne xifthen aus.
Soweit ich es überblicke, brauchst Du keinen Deiner \normalsize-Befehle.

Fabian96
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 30. Jun 2019, 13:19

Beitrag von Fabian96 »

Hier nochmal die Testdaten als .txt_Datei.

Vielen Dank für den Tipp Bartman!
Ich werdes auch das morgen einarbeiten.

Jedoch fehlt mir immernoch der springende Punkt mit den Datensätzen je Karte.
Wie kann ich Latex dazu animieren auf jeder Karte die Daten eines Datensatzes abzubilden?

Vielen Dank im vorraus!
Grüße
Fabian

[Edit 1 - einmal mit dem Duden drüber geschwischt]
Dateianhänge
Testdaten.txt
(253 Bytes) 190-mal heruntergeladen

Fabian96
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 30. Jun 2019, 13:19

Beitrag von Fabian96 »

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[pdftex]{graphicx}
\usepackage{textcomp}
\usepackage{qrcode}
\usepackage{datatool}
\usepackage{algorithm2e}
\usepackage{xstring}
\usepackage{xifthen}
\usepackage{xparse}
\usepackage{etoolbox}
\usepackage{expl3}

% Seiten-Layout
\setlength{\textwidth}{7in}
\setlength{\hoffset}{0in}
\setlength{\voffset}{0in}
\setlength{\oddsidemargin}{-.8in}
\setlength{\evensidemargin}{-.8in}
\setlength{\textheight}{10in}
\setlength{\topmargin}{-1in}

% Mit diesem Kommando legt man fest, dass man
% z.B. keine Seitennummerierung haben will.
\pagestyle{empty}

%Messtellenklassifikation in Makro fassen
\newcommand*{\msArt}[1]{%
    \IfStrEqCase{#1}{%
        {M}{\renewcommand{\vMS}{MS-Art 1}}%
        {D}{\renewcommand{\vMS}{MS-Art 2}}%
        {B}{\renewcommand{\vMS}{MS-Art 3}}%
        {T}{\renewcommand{\vMS}{MS-Art 4}}%
    }[{\renewcommand{\vMS}{Undefinierte MS-Art}}]%
}

% Jetzt geht das eigentliche Dokument los:
\begin{document}

% Wir wollen immer als Einheit Millimeter verwenden.
\setlength{\unitlength}{1mm}

%Lade die entsprechende CSV_Tabelle mit den Messstellendaten
\DTLsetseparator{;}
\DTLloaddb{Messstellen}{Testdaten.csv}

%Setze Standartwert 'Undefiniert' auf Variable um später mit \renewcommand neu besetzen zu können		 
\newcommand{\vBez}{M}
\newcommand{\vBezE}{M}
\newcommand{\vBezEE}{M}
\newcommand{\vMS}{M}
%Sinn der Zeilen Prüfen!
  
% Diese Kommando legt fest, dass ein Bild der angegebenen
% Groesse erzeugt werden soll.
\begin{picture}(178,253)(-7,-1)					 
	% Teile das Blatt in fuenf 51mm hohe,
	% unteineinander liegenden Zeilen.
	%\multiput(0,0)(0,51){5}{
	% Nun wird jede Zeile in zwei 89mm breite
	% Spalten geteilt.
	%\multiput(0,0)(89,0){2}{
	% In die nun erzeugten Kaesten sollen Bilder ``gemalt'' werden,
	% die eine groesse von 51mm mal 89mm haben. Das ist dann die
	% Groesse der Visitenkarten.
	
%	\DTLforeach*{Messstellen}{\LEIT =LEIT_ID,%
%				\aBez =Alt_Bez,%
%				\nBez =Neu_Bez,%
%				\verBez =verbal_Bezeichnung}{ 
	
	%Alternativdefinition zum Code-Testen
	\newcommand{\LEIT}{30000}
	\newcommand{\aBez}{M 0815}
	\newcommand{\nBez}{M 2000 3 00 2}
	\newcommand{\verBez}{verbale Bezeichnung 1}
		
		\begin{picture}(51,89)(0,0)
								 
			%Setze Linien die das Schild in 4 Bereiche unterteilen
				
				\put(50,0){\line(0,1){51}}
				\put(0,25.5){\line(1,0){89}}
					
			% Fülle oberes linkes Feld -----------------------------------------------------------------
								
				%Expandiere den ersten Buchstaben der neuen Bezeichnung in die Variable \firstletter
				\ExplSyntaxOn
					\exp_args:NV \StrLeft \nBez {1} [\firstletter]
		       	\ExplSyntaxOff
				
				% Suche entsprechend des \firstletter die entsprechende Messstellenart raus und plotte 						  sie
				\msArt{\firstletter}			
				\put(5,43){\underline{\textbf{\vMS}}}	
				
				% Definiere die Variable \sLen und Belege sie mit der Länge der verbalen Bezeichnung in 					  mm
				\ifdefined\sLen \settowidth{\sLen}{\verBez}
					\else \newlength{\sLen} \settowidth{\sLen}{\verBez}
				\fi
						
				% Prüfe die Länge der verbalen Bezeichnung und ob ein Zeilenumbruch noetig ist
				\ifdim\sLen < 40 mm \renewcommand{\vBez}{\verBez}
									\put(5,34){\vBez}
				\else 	\ifdim\sLen > 80 mm 	\renewcommand{\vBez}{\StrLeft{\verBez}{23}}
												\renewcommand{\vBezE}{\StrMid{\verBez}{24}{48}} 
												\renewcommand{\vBezEE}{\StrMid{\verBez}{49}{72}} 
												\put(5,34){\vBez}
												\put(5,30){\vBezE}				
												\put(5,26){\vBezEE}
						\else 					\renewcommand{\vBez}{\StrLeft{\verBez}{23}}
												\renewcommand{\vBezE}{\StrMid{\verBez}{24}{40}} 
												\put(5,34){\vBez}
												\put(5,30){\vBezE}
						\fi
				\fi
	
				
			% Fülle unteres linkes Feld ----------------------------------------------------------------
			
				\put(5,20){\underline{\textbf{Bezeichnung}}}	
				\put(5,10){\LARGE \nBez}
				\put(5,3){\small \textsf{(Alt : \aBez)}}
				   		
			% Fülle oberes rechtes Feld ----------------------------------------------------------------
			
				\put(56,28){\includegraphics[scale=0.60]{Logo.jpg}}
						
			% Fülle unteres rechtes Feld ---------------------------------------------------------------
				
				\put(58,11){\qrset{height=1.5cm}}
				\put(58,11){\qrcode{\LEIT - \nBez}}
				
			% AB HIER SOLLTEST DU NICHTS MEHR AENDERN! -------------------------------------------------
				
				% Schnittmarken:
				% oben rechts
				\put(88.5,50.5){\line(-1,0){3}}
				\put(88.5,50.5){\line(0,-1){3}}
				
				% oben links
				\put(0.5,50.5){\line(1,0){3}}
				\put(0.5,50.5){\line(0,-1){3}}
				
				% unten links
				\put(0.5,0.5){\line(1,0){3}}
				\put(0.5,0.5){\line(0,1){3}}
				
				% unten rechts
				\put(88.5,0.5){\line(-1,0){3}}
				\put(88.5,0.5){\line(0,1){3}}
				% ENDE der Schnittmarken
				
				% Jetzt muss noch gesagt werden,
				% dass man mit allem fertig ist:
				
		\end{picture}
			
			
			
			%}
			%}}
\end{picture}

\end{document}

% ENDE
Ich habe heute den ganzen Tag dran gesessen und einige Fehler ausmerzen können. Die Vorlage wie sie jetzt hier steht funktioniert.

Allerding tut sie das nur für die angegebenen Daten aus der Alternativdefinition.

Kann mir jemand verraten, wie ich LaTeX vermittelt bekomme, dass es doch bitte 10 dieser Kärtchen pro Blatt, mit dem jeweils nächsten Datensatz aus der CSV Datei erstellen soll?

Wenn ich die \multiput Funktion dazuschalte, erhalte ich allerhöchstens 10x die gleiche Karte.

Vielen Dank für eure Hilfe im vorraus!

Grüße
Fabian

Gast

Beitrag von Gast »

Zunächst einmal ist Dein Beispiel schon so leider nicht lauffähig. Bitte ersetze externe Abbildungen grundsätzlich wie in der Minimalbeispiel-Anleitung explizit angegeben!

Dann enthält die Kopfzeile der Daten ein Leerzeichen, so dass LEIT_ID nicht gefunden wird. Außerdem gibt es eine Zeile mit leeren Feldern, die auch raus sollte.

latin1 verwendet heute übrigens kein LaTeX-Editor mehr in der Voreinstellung. Also besser alles UTF8 codieren und dann utf8 als Option angeben. Seit über einem Jahr braucht LaTeX dann übrigens gar kein inputenc mehr.

Option pdftex sollte man grundsätzlich weglassen. Das können die Pakete selbst erkennen und bei Verwendung von anderen Engines stört es nur.

Wenn man dann die \DTLforeach-Schleife aktiviert, hat man das Problem, dass \ExplSyntaxOn innerhalb eines Arguments eines Befehls steht. Das funktioniert natürlich nicht, weil das Argument bereits gelesen ist, bevor die catcodes umgeschaltet werden können. Das macht aber eigentlich auch nichts, weil nämlich \StrLeft bereits selbst expandiert, wie der Anleitung zu [d]xstring[/d] zu entnehmen ist. Wäre dem nicht so, müsste man eben eine Anwenderanweisung schreiben, die intern dann l3-Anweisungen nutzt. Dann aber besser gleich auch noch xstring eliminieren. Aber wie gesagt, das braucht es IMO nicht. Und dann wäre es natürlich gut, wenn die Maßangaben der inneren picture-Umgebung halbwegs stimmen würden. Sonst funktioniert es nicht, mehrere davon sauber hinter- und untereinander auszugeben. Wobei die äußere picture-Umgebung IMHO eher stört. Insgesamt landet man dann beispielsweise bei:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.csv}
LEIT_ID;Alt_Bez;Neu_Bez;verbal_Bezeichnung
30005;B 0012;M 3452 0 0E 0;Datensatz 1
30006;D 5002;M 8967 0 0E 0;Datensatz 2
306;M 9986;M 7892 0 XX 0;Datensatz 3
308;D 8752;D 5821 0 XX 0;Datensatz 4
309;T 0036;M 8897 0 09 0;Datensatz 5
\end{filecontents*}
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}% Nur für veraltete LaTeX-Installationen wie Overleaf
\usepackage{graphicx}
\usepackage{textcomp}
\usepackage{qrcode}
\usepackage{datatool}
\usepackage{algorithm2e}
\usepackage{xstring}
\usepackage{xifthen}
\usepackage{xparse}
\usepackage{etoolbox}

% Seiten-Layout (Anmerkung: Besser geometry verwenden!)
\setlength{\textwidth}{7in}
\setlength{\hoffset}{0in}
\setlength{\voffset}{0in}
\setlength{\oddsidemargin}{-.8in}
\setlength{\evensidemargin}{-.8in}
\setlength{\textheight}{10in}
\setlength{\topmargin}{-1in}

% Mit diesem Kommando legt man fest, dass man
% z.B. keine Seitennummerierung haben will.
\pagestyle{empty}

%Messtellenklassifikation in Makro fassen
\newcommand*{\msArt}[1]{%
    \IfStrEqCase{#1}{%
        {M}{\renewcommand{\vMS}{MS-Art 1}}%
        {D}{\renewcommand{\vMS}{MS-Art 2}}%
        {B}{\renewcommand{\vMS}{MS-Art 3}}%
        {T}{\renewcommand{\vMS}{MS-Art 4}}%
    }[{\renewcommand{\vMS}{Undefinierte MS-Art}}]%
}

% Jetzt geht das eigentliche Dokument los:
\begin{document}

% Wir wollen immer als Einheit Millimeter verwenden.
\setlength{\unitlength}{1mm}

%Lade die entsprechende CSV_Tabelle mit den Messstellendaten
\DTLsetseparator{;}
\DTLloaddb{Messstellen}{\jobname.csv}

%Setze Standartwert 'Undefiniert' auf Variable um später mit \renewcommand neu besetzen zu können      
\newcommand{\vBez}{M}
\newcommand{\vBezE}{M}
\newcommand{\vBezEE}{M}
\newcommand{\vMS}{M}
%Sinn der Zeilen Prüfen!
 
% Diese Kommando legt fest, dass ein Bild der angegebenen
% Groesse erzeugt werden soll.
%\begin{picture}(178,253)(-7,-1)                
   % Teile das Blatt in fuenf 51mm hohe,
   % unteineinander liegenden Zeilen.
   %\multiput(0,0)(0,51){5}{
   % Nun wird jede Zeile in zwei 89mm breite
   % Spalten geteilt.
   %\multiput(0,0)(89,0){2}{
   % In die nun erzeugten Kaesten sollen Bilder ``gemalt'' werden,
   % die eine groesse von 51mm mal 89mm haben. Das ist dann die
   % Groesse der Visitenkarten.

   \noindent
   \DTLforeach*{Messstellen}{\LEIT=LEIT_ID,%
            \aBez=Alt_Bez,%
            \nBez=Neu_Bez,%
            \verBez=verbal_Bezeichnung}{%
   %
   %Alternativdefinition zum Code-Testen
   %\newcommand{\LEIT}{30000}
   %\newcommand{\aBez}{M 0815}
   %\newcommand{\nBez}{M 2000 3 00 2}
   %\newcommand{\verBez}{verbale Bezeichnung 1}
   %  
      \begin{picture}(89,51)(0,0)
                         
         %Setze Linien die das Schild in 4 Bereiche unterteilen
           
            \put(50,0){\line(0,1){51}}
            \put(0,25.5){\line(1,0){89}}
               
         % Fülle oberes linkes Feld -----------------------------------------------------------------
                       
            % In der Voreinstellung expandiert \StrLeft bereits
            \StrLeft{\nBez}{1}[\firstletter]
           
            % Suche entsprechend des \firstletter die entsprechende Messstellenart raus und plotte                     sie
            \msArt{\firstletter}        
            \put(5,43){\underline{\textbf{\vMS}}}  
           
            % Definiere die Variable \sLen und Belege sie mit der Länge der verbalen Bezeichnung in                  mm
            \ifdefined\sLen \settowidth{\sLen}{\verBez}
               \else \newlength{\sLen} \settowidth{\sLen}{\verBez}
            \fi
                 
            % Prüfe die Länge der verbalen Bezeichnung und ob ein Zeilenumbruch noetig ist
            \ifdim\sLen < 40 mm \renewcommand{\vBez}{\verBez}
                           \put(5,34){\vBez}
            \else    \ifdim\sLen > 80 mm    \renewcommand{\vBez}{\StrLeft{\verBez}{23}}
                                    \renewcommand{\vBezE}{\StrMid{\verBez}{24}{48}}
                                    \renewcommand{\vBezEE}{\StrMid{\verBez}{49}{72}}
                                    \put(5,34){\vBez}
                                    \put(5,30){\vBezE}            
                                    \put(5,26){\vBezEE}
                  \else                \renewcommand{\vBez}{\StrLeft{\verBez}{23}}
                                    \renewcommand{\vBezE}{\StrMid{\verBez}{24}{40}}
                                    \put(5,34){\vBez}
                                    \put(5,30){\vBezE}
                  \fi
            \fi
   
           
         % Fülle unteres linkes Feld ----------------------------------------------------------------
         
            \put(5,20){\underline{\textbf{Bezeichnung}}}  
            \put(5,10){\LARGE \nBez}
            \put(5,3){\small \textsf{(Alt : \aBez)}}
                     
         % Fülle oberes rechtes Feld ----------------------------------------------------------------
         
            \put(56,28){\includegraphics[width=28mm,height=20mm]{example-image}}
                 
         % Fülle unteres rechtes Feld ---------------------------------------------------------------
           
            \put(58,11){\qrset{height=1.5cm}}
            \put(58,11){\qrcode{\LEIT - \nBez}}
           
         % AB HIER SOLLTEST DU NICHTS MEHR AENDERN! -------------------------------------------------
           
            % Schnittmarken:
            % oben rechts
            \put(88.5,50.5){\line(-1,0){3}}
            \put(88.5,50.5){\line(0,-1){3}}
           
            % oben links
            \put(0.5,50.5){\line(1,0){3}}
            \put(0.5,50.5){\line(0,-1){3}}
           
            % unten links
            \put(0.5,0.5){\line(1,0){3}}
            \put(0.5,0.5){\line(0,1){3}}
           
            % unten rechts
            \put(88.5,0.5){\line(-1,0){3}}
            \put(88.5,0.5){\line(0,1){3}}
            % ENDE der Schnittmarken
           
            % Jetzt muss noch gesagt werden,
            % dass man mit allem fertig ist:
           
      \end{picture}\linebreak[3]%
    }
         %}}
%\end{picture}

\end{document}
Das ist sicher noch nicht minimal. Auch sind sicher noch signifikante Leerzeichen übrig, die beseitigt gehören. Und eventuell will man die picture-Umgebungen dicht an dicht packen, muss also die Größenangabe nochmal korrigieren. Das sehe ich aber nicht als meine Aufgabe.

Fabian96
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 30. Jun 2019, 13:19

Beitrag von Fabian96 »

Vielen Dank für die Hilfe @Gast!

Ich habe deine Änderungen in den Daten übernommen. Deine Variante war sehr lauffähig und entspricht dem was ich mir vorgestellt habe!

Die Größenangaben innherhalb der picture-Umgebung resultieren daher, dass diese Karten im weiteren Verlauf laminiert werden sollen. Der 'Spalt' zwischen den Karten ist also durchaus gewollt.

Aber bitte verrate mir was du genau geändert hat, damit die Karten so hintereinander erscheinen? Ist es wirklich nur der \linebreak[3]-Befehl?

Grüße
Fabian

Antworten