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, 08:55

cis's gravatar image

cis
9.5k75452491
Akzeptiert-Rate: 29%

bearbeitet 19 Jun '14, 08: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, 09:58

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

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, 11: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, 23: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, 18:34) gast3
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, 18:38) gast3
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×17
×13

gestellte Frage: 19 Jun '14, 08:55

Frage wurde gesehen: 8,365 Mal

zuletzt geändert: 22 Jun '14, 18:38