Hallo!

Da ich nicht bei allen Kodierungen weiß, wie man sie aufruft, muß ich in folgender filecontents-Liste z.B. die Listeneinträge, die mit C19 oder U beginnen, auschließen, so daß sie nicht in der Schleife verwendet werden. Weiß jmd., wie das geht?

Open in writeLaTeX
\documentclass[12pt, pointednumbers]{scrartcl}
\usepackage[utf8]{inputenc}
 \usepackage{selinput}
 \SelectInputMappings{adieresis={ä},  germandbls={ß}}
\usepackage[T5, T1, LY1, LTH, TS1, LAE]{fontenc}
%\usepackage[utf8]{inputenx}
%
\usepackage[ngerman]{babel}

\usepackage{datatool}
\usepackage{xcolor}
\usepackage{hyperref}

%Überschriften
\setkomafont{disposition}{\normalcolor\usefont{T1}{lmtt}{\bfdefault}{n}}%\bfseries\ttfamily

\newcommand{\ABC}{%
ABCDEFGHIJKLMNOPQURSTUVWYZ Ä Ö Ü \par
           abcdefghijklmnopqrstuvwxyz ä ö ü ß\par
           0123456789\par
 .,:;-!" '\$\%\&/@\_\S\#\textasciitilde\textbackslash\textless\textgreater[]\{\}() 
}

\usepackage{filecontents}

\begin{filecontents}{mydata.csv}
T1     pag  b      n      C:/texlive/
C19 fs  b   it
C19 fs  b   n
C19 fs  b   m
LTH    waree    b      it     C:/texlive/
U      bla  n   m
OML   zpple   bx      it   C:/texlive/
LY1    zlmtt   lc        it   C:/texlive/  
T5      zlmtt   bx      it   C:/texlive/
\end{filecontents}

\DTLsetseparator{ }
\DTLloaddb[
  noheader,
   keys={encoding,family,series,shape,adress}
  ]{mydb}{mydata.csv}

\begin{document}

%\tableofcontents
%\newpage

\DTLforeach*{mydb}{\encoding=encoding, \family=family, \series=series, \shape=shape, \adress=adress}{%
  \section[\textbackslash usefont\{\encoding\}\{\family\}\{\series\}\{\shape\}]{\textbackslash usefont\{\encoding\}\{\family\}\{\series\}\{\shape\} \\
\footnotesize{found in:  \adress}}

\begingroup
%\inputencoding{\encoding}
 \usefont{\encoding}{\family}{\series}{\shape}
 \ABC
\endgroup
}
\end{document}

alt text

gefragt 19 Jun '14, 02:55

cis's gravatar image

cis
5.4k861169
Akzeptiert: 68%

bearbeitet 19 Jun '14, 02:59


Generell kann man bei datatool Zeilen über Bedingungen ausschließen. In der Anleitung zum Paket gibt es dazu u. a. das Beispiel Filtering Rows. Damit dürfte die Frage also weniger sein, wie man in datatools Einträge ausnehmen kann, sondern eher, wie Du erkennen kannst, dass Einträge auszunehmen sind. Eine einfache Möglichkeit wäre die Verwendung von \not\DTLiseq{\encoding}{…}:

Open in writeLaTeX
\documentclass[12pt, pointednumbers]{scrartcl}
\usepackage[utf8]{inputenc}
 \usepackage{selinput}
 \SelectInputMappings{adieresis={ä},  germandbls={ß}}
\usepackage[T5, T1, LY1, LTH, TS1, LAE]{fontenc}
%\usepackage[utf8]{inputenx}
%
\usepackage[ngerman]{babel}

\usepackage{datatool}
\usepackage{xcolor}
\usepackage{hyperref}

%Überschriften
\setkomafont{disposition}{\normalcolor\usefont{T1}{lmtt}{\bfdefault}{n}}%\bfseries\ttfamily

\newcommand{\ABC}{%
ABCDEFGHIJKLMNOPQURSTUVWYZ Ä Ö Ü \par
           abcdefghijklmnopqrstuvwxyz ä ö ü ß\par
           0123456789\par
 .,:;-!" '\$\%\&/@\_\S\#\textasciitilde\textbackslash\textless\textgreater[]\{\}() 
}

\usepackage{filecontents}

\begin{filecontents}{mydata.csv}
T1 pag b n C:/texlive/
C19 fs b it
C19 fs b n
C19 fs b m
LTH waree b it C:/texlive/
U bla n m
OML zpple bx it C:/texlive/
LY1 zlmtt lc it C:/texlive/  
T5 zlmtt bx it C:/texlive/
\end{filecontents}

\DTLsetseparator{ }
\DTLloaddb[
  noheader,
   keys={encoding,family,series,shape,adress}
  ]{mydb}{mydata.csv}

\begin{document}

%\tableofcontents
%\newpage

\DTLforeach*[\not\DTLiseq{\encoding}{C19}\and\not\DTLiseq{\encoding}{Ubla}]{mydb}{\encoding=encoding, \family=family, \series=series, \shape=shape, \adress=adress}{%
  \section[\textbackslash usefont\{\encoding\}\{\family\}\{\series\}\{\shape\}]{\textbackslash usefont\{\encoding\}\{\family\}\{\series\}\{\shape\} \\
\footnotesize{found in:  \adress}}

\begingroup
%\inputencoding{\encoding}
 \usefont{\encoding}{\family}{\series}{\shape}
 \ABC
\endgroup
}
\end{document}

Näheres zum optionalen Argument von \DTLforeach* und den Conditionals ist der datatool-Anleitung zu entnehmen. Wie man neue Bedingungen definiert, beispielweise ein \DTLIfFileExists habe ich selbst noch nicht ermittelt. Ich denke aber, Du kommst auch mit obigem ganz gut hin.

Ich würde mir übrigens überlegen, die Datensätze mehrfach zu durchlaufen, und jeweils hintereinander nur diejenigen desselben Fontencodings auszugeben. Eine solche Sortierung bringt sicher einigen Gewinn und erlaubt beispielsweise die Mathecodierung gesondert zu behandeln.

Permanenter link

beantwortet 19 Jun '14, 03:58

Ijon%20Tichy's gravatar image

Ijon Tichy
4.4k618

Also das funktioniert übrigens prima, kann allerdings äußerst speicher- und zeitintenisv werden. Beispiel: In einer Liste sind die ersten 10 Eintäge "X" nicht ausgeschlossen, der Rest (z.B. 30'000 Einträge) schon; also ohne Weiteres \DTLiseq{\x}{X} - jetzt wird die ganze Liste durchgegangen, und das dauert ewig.

(21 Jun '14, 05:32) cis

Nachtrag: Also das o.g. Problem ist scheints sogar so gravierend, daß die Suche manchmal abbricht, "weil der Speicher voll ist" - also ich muß mir irgendwas Besseres überlegen, als das "Ausschlußprinzip".

(21 Jun '14, 17:56) cis

@cis Ich würde an Deiner Stelle bereits bei der Erstellung der Datenbank die Einträge aussortieren, die nicht fehlerfrei wie gewünscht verarbeitet werden können. Ich möchte deshalb darauf zurück kommen, dass es sinnvoll wäre, etwas mehr als nur find einzusetzen. Wenn denn perl nicht in Frage kommt, könnte man natürlich auch lua mit TeXLua verwenden. Einen kompletten Verzeichnisbaum damit zu durchsuchen, ist aber eher aufwändig bzw. bedarf wieder systemabhängiger Aufrufe wie find, deren Ergebnisse man dann weiterverarbeitet.

(22 Jun '14, 12:34) Ijon Tichy
1

@cis Erneut möchte ich auch darauf hinweisen, dass man Type-1-Fonts, TrueType-Fonts und OpenType-Fonts mit XeLaTeX und LuaLaTeX weit einfacher über fontspec verarbeiten kann. Dein Weg erfasst sehr viele dieser Fonts gar nicht, sondern nur die Fonts, die über Font-Installationen für pdfLaTeX erschlossen sind. Langfristig halte ich das nicht mehr für sinnvoll.

(22 Jun '14, 12:38) Ijon Tichy
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×11
×8

Frage gestellt: 19 Jun '14, 02:55

Frage wurde angeschaut: 1,961 Mal

Zuletzt aktualisiert: 22 Jun '14, 12:38