goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Direktlinks:
Zuletzt aktive Beiträge
Unbeantwortete Beiträge
[Erweitert]

Forenstatistik:
Beiträge: 99320
Top-Poster: Johannes_B (5059)

Wir begrüßen unseren neuesten Benutzer Ludio.

Links:


Mit Unterstützung von DANTE e.V.: Deutschsprachige Anwendervereinigung TeX. Danke den Mitgliedern!





Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Formatierung von Schildern.

 

Fabian96
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2019, 12:40     Titel: Formatierung von Schildern.
  Antworten mit Zitat      
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.

Code • Öffne in Overleaf
 
\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
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2019, 12:50     Titel: Ergänzung
  Antworten mit Zitat      
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
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2019, 18:04     Titel: Abhilfe schaffen
  Antworten mit Zitat      
Fabian96 hat Folgendes 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: 1824
Anmeldedatum: 16.07.09
Wohnort: Hessische Provinz
Version: ---
     Beitrag Verfasst am: 28.06.2019, 18:50     Titel:
  Antworten mit Zitat      
Code • Öffne in Overleaf
%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.
Private Nachricht senden Benutzer-Profile anzeigen

Fabian96
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 30.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2019, 13:39     Titel: Testdaten
  Antworten mit Zitat      
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

Testdaten.xls
 Beschreibung:

Download
 Dateiname:  Testdaten.xls
 Dateigröße:  26 KB
 Heruntergeladen:  14 mal
Private Nachricht senden Benutzer-Profile anzeigen

Bartman
Forum-Meister
Forum-Meister


Beiträge: 1824
Anmeldedatum: 16.07.09
Wohnort: Hessische Provinz
Version: ---
     Beitrag Verfasst am: 30.06.2019, 15:39     Titel:
  Antworten mit Zitat      
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

    Code • Öffne in Overleaf
    \ifdefined\sLen dann \else sonst\fi

    und
    Code • Öffne in Overleaf
    \ifdim\sLen<40mm wahr \else falsch\fi


    ersetzt, kommst Du ohne xifthen aus.


Soweit ich es überblicke, brauchst Du keinen Deiner \normalsize-Befehle.
Private Nachricht senden Benutzer-Profile anzeigen

Fabian96
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 30.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2019, 21:52     Titel:
  Antworten mit Zitat      
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]

Testdaten.txt
 Beschreibung:

Download
 Dateiname:  Testdaten.txt
 Dateigröße:  253 Bytes
 Heruntergeladen:  18 mal
Private Nachricht senden Benutzer-Profile anzeigen

Fabian96
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 30.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2019, 15:23     Titel:
  Antworten mit Zitat      
Code • Öffne in Overleaf
\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
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2019, 09:03     Titel:
  Antworten mit Zitat      
Zunächst einmal ist Dein Beispiel schon so leider nicht lauffähig. Bitte ersetze externe Abbildungen grundsätzlich wie in der InfoMinimalbeispiel-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 xstring 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:
Code • Öffne in Overleaf
\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
Anmeldedatum: 30.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2019, 13:07     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen Gehe zu Seite 1, 2  Weiter



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de


  Datenschutzerklärung | Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2019 goLaTeX.de