# Latex Fragen (Layout, commands, ... - Fachbegriffe fehlen)

## franzf

Moin (oder so - *gähn*  :Wink: )

Ich möchte mir meine Gartenbaurecherchen endlich ordentlich in ein PDF quetschen. Um flexibel in Layout und Gestaltung zu sein, dachte ich es wäre nett sich dazu eigene "commands" zuzulegen. Nur weiß ich nicht wonach ich googlen soll...

Um das ganze abzukürzen, einfach mal wie ich es mir gedacht hatte:

```
\pflanze{botanischer_pflanzenname}{deutscher_pflanzenname}

  \bodenansprueche{blabla}

  \ph{6,0-6,5}

  \klima{blabla}

  \vermehrung

    \aussaat{blabla}

    \steckling{blabla}

    \steckholz{blabla}

  \tips

    Blablauswusf
```

Alternative Syntax für Vermehrung (wenn das geht...)

```
\vermehrung[aussaat,steckling,steckholz]

  {Aussaatblabla}

  {stecklingblabla}

  {steckholzblabla}
```

Falls ein Wert nicht angegeben wird soll entweder ein default genommen werden (z.B. "gedeiht überall" bei bodenansprueche) oder einfach nichts in der Tabelle auftauchen (z.B. falls "steckholz" nicht gesetzt wird - macht ja z.B. bei Salat keinen Sinn  :Wink: )

Ich will keine fertige Lösung, sondern Begriffe, nach denen ich suchen kann. Eine einsteigerfreundliche Doku, wie man Texte selber "in Form" bringt, wäre auch super - ich habe mir mal folgende Zeilen ergoogled und verstehe nur Bahnhof  :Very Happy: 

```
\makeatletter

\def\ttl@mkchap@i#1#2#3#4#5#6#7{%

    \ttl@assign\@tempskipa#3\relax\beforetitleunit

    \vspace{\@tempskipa}%<<<<<< REMOVE THE * AFTER \vspace

    \global\@afterindenttrue

    \ifcase#5 \global\@afterindentfalse\fi

    \ttl@assign\@tempskipb#4\relax\aftertitleunit

    \ttl@topmode{\@tempskipb}{%

        \ttl@select{#6}{#1}{#2}{#7}}%

    \ttl@finmarks  % Outside the box!

    \@ifundefined{ttlp@#6}{}{\ttlp@write{#6}}}

\makeatother
```

Schon mal DANKE und nen schönen (endlich wieder sonnigen und warmen) Samstag

Franz

----------

## l3u

Wenn man für LaTeX nach was sucht, was über „mein erstes Dokument in LaTeX“ hinausgeht, dann wird’s schwierig ;-)

Diese \makeatletter- und \makeatother-Sachen braucht man (denke ich) nur dann, wenn man irgendwo tief ins System eingreift. Sowas wie Default-Werte verwenden, wenn man nichts angibt, ist kein Problem. LaTeX ist ja schließlich eine Programmiersprache. Hier ein Beispiel:

```
\documentclass{scrartcl}

\usepackage[ngerman]{babel}

\usepackage[utf8]{inputenc}

\usepackage{ae,aecompl}

\usepackage{ifthen}

\newenvironment{pflanze}[1]

{\section*{#1}}

{}

\newcommand{\keinAnspruch}{Gedeiht überall}

\newcommand{\anspruch}[1][\empty]{

Anspruch:

\ifthenelse{\equal{#1}{\empty}}%

{\keinAnspruch}

{#1}

}

\begin{document}

\begin{pflanze}{Pflanze Nr. 1}

\anspruch

\end{pflanze}

\begin{pflanze}{Pflanze Nr. 2}

\anspruch[Benötigt sandigen Boden]

\end{pflanze}

\end{document}
```

Such doch einfach nach Doku zu \newcommand und \newenvironment. Da wirst du bestimmt fündig :-) Ich hab damals für meine Dissertation ein paar Sachen selber geschrieben (bzw. selber schreiben müssen ;-), siehe http://nasauber.de/latex_know_how/pakete/ – vielleicht hilft dir das auch weiter?

Ps:

 *Quote:*   

> \ph{6,0-6,5}

 

Da gehört (laut Duden, siehe Abschnitt „Textverarbeitung und E-Mails“) ein Gedankenstrich hin, kein Bindestrich. Also entweder "--" verwenden oder gleich "–". Wenn man LaTeX nimmt, kann man das ja machen :-) Zu beachten ist auch das schmale Leerzeichen "\,", das z. B. zwischen das „z.“ und das „B.“ bei „z. B.“ gehört (also "z.\,B.") oder vor Gradangaben ("20\,°C"). Nur so …

----------

## franzf

Ich danke dir für deine Antwort  :Smile: 

Das ist ja nicht das erste Mal, dass ich mich in den dunklen Ecken von LaTeX verirrt habe. Meist waren es mir selbst auferlegte spezielle Formatierungen, für die ich mit etwas Penetranz immer eine Lösung gefunden habe.

Mit deinen Hinweisen hoffe ich erstmal weiterzukommen. Ein Buchtip/Link/... der einen vom einfachen Dokument zu Komplexeren Themen führt wäre trotzdem super. Werde dann mal rumbasteln (wohl erst wenns Wetter wieder schlechter wird).

Programmieren generell ist ja kein Probem, C++ geht eigentlich recht gut von der Hand. Von daher kenn ich auch die Antwort "lies einfach Quelltext, das ist das beste, was du tun kannst" - Aber ich denke in Latex fehlen mir für das tiefere Verständnis noch einige Grundlagen. Da du es immerhin bis zur Doktorarbeit geschafft hast, kennst du vllt. neben den üblichen Büchern einen Geheimtipp  :Smile: 

----------

## l3u

Gestaltet sich schwierig imho … ich hab halt immer nach irgendwas gegoogelt und dann irgendwann irgendwas gefunden. nach meiner Erfahrung gibt es 99 % Einführungen in LaTeX, die nichts bringen, und 1 % Lösungen für das eigentlich Problem. War teilweise wirklich schwierig. Einen „Geheimtip“ habe ich leider nicht … immer mal hab ich ne Frage in das Forum LaTeX-Forum von mrunix gestellt. Hat oft geholfen.

----------

## mv

Für konkrete Fragen gibt es im usenet (de.comp.text.tex oder auf Englisch in comp.text.tex) eher kompetente Antworten. Die Standard-Empfehlung für komplexere Sachen mit LaTeX ist das Buch "Der LaTeX-Begleiter (oder die englische Version "The LaTeX Companion"), und für (plain)TeX selbst natürlich Knuth' legendäres Buch. Gibt es m.W. beides nicht in elektronischer Form.

Allerdings für "gezielt auf eine Seite platzieren" ist LaTeX nicht das richtige Tool; da könnte man höchstens mit der picture-Umgebung o.ä. arbeiten: Komplexe Tabellen in LaTeX sind sehr unbefriedigend. Aber vielleicht verstehe ich auch nur nicht, wie Du Dir die Ausgabe genau vorstellst.

----------

## franzf

Werd den Gruppen beitreten.

Bei den Büchern: Ist die deutsche Übersetzung zu empfehlen? Bei C++-Büchern hab ich es öfters erlebt, dass Begriffe komisch/falsch übersetzt wurden, manchmal gabs sogar nette compile-Fehler in den Beispielen, weil die auch übersetzt wurden (weiß bloß nicht mehr, welches Buch das war  :Wink: )

Bezügl. dem Sinn: Ich will einfach durch die "pflanze"-Umgebung einen Weg schaffen, mit einfachen Befehlen Daten einzutragen, die dann über die Definition einheitlich ausgegeben werden. Dass Latex für manuelles Layout nicht unbedingt geeignet ist habe ich schon selber feststellen dürfen  :Wink: 

Wenn du auf den makeatletter-Teil anspielst: Der setzt das Chapter-Heading ohne kilometerlangem spacing an den Seitenanfang...

----------

## mv

 *franzf wrote:*   

> Bei den Büchern: Ist die deutsche Übersetzung zu empfehlen?

 

Frank Mittelbach ist Deutscher, insofern dürfte die Übersetzung selbst zumindest beim LateX-Companion kein Problem sein. Allerdings war die englische Version häufig aktueller (neuere Auflagen usw). Von Knuth Buch weiß ich nicht, ob es eine Übersetzung gibt.

 *Quote:*   

> Bezügl. dem Sinn: Ich will einfach durch die "pflanze"-Umgebung einen Weg schaffen, mit einfachen Befehlen Daten einzutragen, die dann über die Definition einheitlich ausgegeben werden.

 

Direkt ausgeben wäre einfach:

```
\newcommand*{\pflanze}[2]{\textbf{#1} (\textit{#2})}

\newcommand{\bodenansprueche}[1]{{\footnotesize#1\par}}
```

Schwieriger wird es bei komplexeren Dingen, die in Abhängigkeit vom Kontext setzen, wie bei \Vermehrung. Zwar kann man mit optionalen Argumenten arbeiten (wie in Deinem zweiten Beispiel), aber die LaTeX-Art wäre wahrscheinliche eine eigene Environment

```
\newenvironment{vermehrung}{\itemize}{\enditemize}

\newcommand{\aussaat}[1]{\item \textbf{Aussaat:} #1}
```

die dann so benutzt wird: 

```
\begin{vermehrung}

\aussaat{Bla}

\end{vermehrung}
```

Natürlich kann man statt der fertigen {itemize}-Liste auch eine mit verändertem Aussehen bentzen: 

```
texdoc enumitem
```

----------

## franzf

Hab mir jetzt den Latex-Begleiter bestellt.

Klar ist direkt Ausgeben leicht, es soll schon "gebündelt" werden. Stelle mir die Angaben kurz in einem kleinen Kasten vor. Ob als Liste, Tabelle, ... formatiert - k.A., dafr will ich das ja auch trennen (Dateneingabe und Darstellung). Evtl. unabhängig von der Eingabereihenfolge in eine bestimmte Ordnung gebracht - aber erstmal überhaupt eine angenehme Eingabeform finden. Danke nochmal für den (weiteren) Input, damit komme ich für den Anfang weit genug.

----------

## mv

 *franzf wrote:*   

> HKlar ist direkt Ausgeben leicht, es soll schon "gebündelt" werden.

 

Also so ähnlich wie bei \maketitle. Typischerweise macht man das, indem die Macros andere Macros definieren. etwa so:

```
\makeatletter

\newcommand{\bodenansprueche}[1]{\def\garten@bodenansprueche{#1}}

\makeatother
```

Später greifst Du dann im Ausgabemacro auf \garten@bodenansprueche zu.

Für solche "internen" Hilsmakros empfiehlt sich ein einheitlicher Präfix oder Posix (mein gewählter Vorschlag hier: \garten@); hierzu benutzt man auch gerne das "@"-Zeichen, damit der Benutzer nicht aus Versehen selbst diese Macros benutzt. Die Definitionen müssen dann halt in ein eigenes .cls- or .sty-File, oder alternativ in \makeatlatter ... \makeatother eingeschlossen werden, damit "at" zum Zeitpunkt der Definition wie ein "letter" bzw. danach wieder wie ein "other" behandelt wird.

Natürlich kann man für mehrere Definitionen auch den Kommandonamen mit einer Nummer versehen. Zugehöriger Codeschnipsel:

```
newcommand{\bodenansprueche}[1]{\expandafter\def\csname garten@bodenansprueche\garten@zaehler\endcsname{#1}...}
```

Dann musst Du allerdings noch den \garten@zaehler erhoehen und natürlich beim Zusammenbauen ebenfalls mit einem Zähler arbeiten: Das Ganze wird dann schnell sehr komplex.

 *Quote:*   

> Evtl. unabhängig von der Eingabereihenfolge in eine bestimmte Ordnung gebracht.

 

Selbst Lamport selbst hat zum Sortieren lieber das externe Programm bibtex geschrieben - obwohl theoretisch auch alles mit TeX selbst machbar wäre - weil für solche komplexen Sachen ist LaTeX wirklich eine Krücke. Es ist zwar so ziemlich alles möglich, aber extrem umständlich. Vielleicht solltest Du lieber mit perl oder python einen Prä-parser schreiben, wenn Du wirklich sortieren willst u.ä.

Möglicherweise kann man mit luatex einiges in lua implementieren und damit die schlimmste Macro-Schubserei vermeiden, aber damit kenne ich mich nicht aus.

Vor allem ist dann halt Dein Teil von luatex abhängig, das zwar im Moment aktiv gewartet wird, aber wer weiß, ob es das in 10 Jahren noch gibt...

Andere Erweiterungen wie LaTeX3 werden wohl auch nie aus dem Konzeptstadium herauskommen...

----------

## franzf

 *mv wrote:*   

> Selbst Lamport selbst hat zum Sortieren lieber das externe Programm bibtex geschrieben - obwohl theoretisch auch alles mit TeX selbst machbar wäre - weil für solche komplexen Sachen ist LaTeX wirklich eine Krücke. Es ist zwar so ziemlich alles möglich, aber extrem umständlich. Vielleicht solltest Du lieber mit perl oder python einen Prä-parser schreiben, wenn Du wirklich sortieren willst u.ä.
> 
> Möglicherweise kann man mit luatex einiges in lua implementieren und damit die schlimmste Macro-Schubserei vermeiden, aber damit kenne ich mich nicht aus.
> 
> Vor allem ist dann halt Dein Teil von luatex abhängig, das zwar im Moment aktiv gewartet wird, aber wer weiß, ob es das in 10 Jahren noch gibt...
> ...

 

Gut, danke... Mal schauen, vielleicht nehm ich das als Anlass mich wieder mit ruby zu beschäftien - oder mit perl anzufangen.

Luatex war mir ein Begriff, ist auch installiert (als Abhängigkeit von texlive-{core,base,latex}. Hab aber mal auf der Projektseite nachgechaut, und das was momentan in Gentoo ist ist nur ein beta-release. Alle paar Wochen gibts nen commit, und im Bugtracker sammeln sich seit Monaten unbeantwortete reports :/ "Aktiv" schaut mMn. anders aus...

Mal schauen, wie das dann am Ende ausgeht. Datensätze als .ini eingeben war mein erster Gedanke, dann dachte ich an ne DB, dadurch wären die Daten auch anderweitig einfach abruf- und integrierbar.

Und heute ist auch noch der Latex-Begleiter angekommen, da hab ich erstmal einiges zu lesen.  :Smile: 

----------

## mv

 *franzf wrote:*   

> Datensätze als .ini eingeben war mein erster Gedanke, dann dachte ich an ne DB

 

Von der Strukturierung der Daten her könnte vielleicht sogar ein zugeschneidertes XML ein angemessenes Format dafür sein. Möglicherweise lässt sich das dann irgendwie mit docbook ohne händische Programmierung weiterverbarbeiten, aber damit habe ich gar keine Erfahrung.

----------

## l3u

Mach doch ne XML-Datei, parse diese mit Python und lass das dann LaTeX-Code generieren. Ist kein großes Problem – vermutlich einfacher, als die nötigen Makros in LaTeX selbst zu schreiben.

Etwa sowas:

```
<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE gartenbau

  PUBLIC '-//dein-namespace.de//DTD gartenbau 1//EN'

  'http://dein-namespace.de/pub/dtd/gartenbau1.dtd'>

<gartenbau>

  <pflanze botanisch="botanischer_pflanzenname" deutsch="deutscher_pflanzenname">

    <bodenansprueche typ="..." />

    <ph ph="..." />

    <vermehrung>

      <aussaat typ="..."/>

      <steckling typ="..."/>

      <steckholz typ="..."/>

    </vermehrung>

    <tips>...</tips>

  </pflanze>

</gartenbau>
```

Kommt halt drauf an, wie’s dann aussehen soll.

Kannst ja noch nen <header>...</header>-Block machen mit den Standardwerten, die man dann verwendet, wenn nichts angegeben ist oder so.

----------

