PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Klassenoption in \ifthenelse abfragen



Magger
18-04-2010, 21:25
Hallo,

gibt es eine Möglichkeit einen gewissen Befehlsblock in Abhängigkeit von bestimmten Klassenoptionen ausführen zu lassen.

Beispielweise soll ein und dasselbe Dokument einmal mit der Klassenoption a4paper und einmal mit b5paper erstellt werden. In Abhängigkeit dieser Klassenoption sollen gewisse andere Befehle (z.B. zur Skalierung von Grafiken) im Rahmen einer if-Abfrage ausgeführt werden.

Die Möglichkeit des ifthen-Paketes mit der Erstellung eines Boolean-Wertes sind mir durchaus bewusst, ich frage mich nur, ob man die Klassenoptionen auch direkt abfragen kann?

Viele Grüße

Mathias

rais
18-04-2010, 21:43
Die Möglichkeit des ifthen-Paketes mit der Erstellung eines Boolean-Wertes sind mir durchaus bewusst, ich frage mich nur, ob man die Klassenoptionen auch direkt abfragen kann?

ja -- sag ich jetzt einfach mal so ...
Wie so eine Abfrage in Deinem Fall aussehen mag, hängt imho von der von Dir verwendeten Klasse ab.

MfG

voss
19-04-2010, 08:24
gibt es eine Möglichkeit einen gewissen Befehlsblock in Abhängigkeit von bestimmten Klassenoptionen ausführen zu lassen.

Beispielweise soll ein und dasselbe Dokument einmal mit der Klassenoption a4paper und einmal mit b5paper erstellt werden. In Abhängigkeit dieser Klassenoption sollen gewisse andere Befehle (z.B. zur Skalierung von Grafiken) im Rahmen einer if-Abfrage ausgeführt werden.

Die Möglichkeit des ifthen-Paketes mit der Erstellung eines Boolean-Wertes sind mir durchaus bewusst, ich frage mich nur, ob man die Klassenoptionen auch direkt abfragen kann?


Beispiel für article-Klasse:

pdflatex '\PassOptionsToClass{a4paper}{article} \input datei.tex'

Herbert

Magger
19-04-2010, 08:56
Hallo Herbert, vielen Dank für deinen Vorschlag.

Ich habe es folgendermaßen probiert, aber es funktioniert nicht.


\documentclass[b5paper]{article}

\PassOptionsToClass{a4paper}{article} \newcommand{\seitenformat}{A4}
\PassOptionsToClass{b5paper}{article} \newcommand{\seitenformat}{B5}

\begin{document}

Das aktuelle Seitenformat ist \seitenformat.

\end{document}

Ich hoffe mein Anliegen ist jetzt verständlich.

voss
19-04-2010, 10:00
Ich habe es folgendermaßen probiert, aber es funktioniert nicht.

Ich hoffe mein Anliegen ist jetzt verständlich.

Du musst es genauso machen, wie ich es angeben habe, d.h.
pdflatex mit den oben angebenen Parametern starten.

Herbert

u_fischer
19-04-2010, 10:04
ich frage mich nur, ob man die Klassenoptionen auch direkt abfragen kann?

Das hängt davon ab, was die Option eigentlich tut. Im Falle von a4paper wird in den Klassen meist einfach \paperwidth + \paperheight gesetzt, du könntest also nur die Längen abfragen und vergleichen.

Wenn du geometry benutzt, wird die Papieroption in \Gm@paper gespeichert (nur wenn sie gesetzt wird, sonst ist \Gm@paper undefiniert).

Du kannst dir aber auch leicht ein kleines Paket mypapertest.sty schreiben, dass die gewünschten Schalter definiert:


\ProvidesPackage{mypapertest}
[2010/04/19]

\newif\ifaivpaper
\DeclareOption{a4paper}{\aivpapertrue}
\ProcessOptions\relax
\endinput


\documentclass[a4paper]{article}
\usepackage{mypapertest}

\begin{document}
\ifaivpaper a4\else was anderes\fi
\end{document}

Syralist
19-04-2010, 11:09
Also ich skaliere meine Graphiken fast ausschließlich mit \textwidth. Also z.b.

\includegraphics[width=0.5\textwidth]{bild}
da brauch ich mir keine Gedanken über die Seitengröße machen.
Vielleicht hilft das als Ansatz.

Magger
19-04-2010, 12:51
Ich habe mir jetzt aus Ulrikes Lösung folgendes gebastelt:


\documentclass[b5paper]{scrartcl}

\DeclareOption{a4paper}{\newcommand{\seitenformat} {A4}}
\ProcessOptions\relax

\DeclareOption{b5paper}{\newcommand{\seitenformat} {B5}}
\ProcessOptions\relax

\begin{document}

Das Seitenformat ist \seitenformat.

\end{document}

wobei man natürlich den \newcommand-Befehl durch irgendwas sinnvolleres (Grafikskalierung, Setzen bestimmter Seitenrändern mittels geometry, ...) nutzen kann. Das ist für mich die Lösung des Problems. Vielen Dank dafür.

@Syralist

Ja, diese Lösung nutze ich typischerweise auch. Sie ist aber nur wirklich dann praktisch, wenn alle Grafiken gleich groß sind (z.B. bei Diagrammen). Sobald man anfängt mal 0.5\textwidth und mal 0.7\textwidth zu setzen, wird es mühsam. Haben alle Bilder die gleiche "Auflösung", so reicht ein einfaches scale=<fester Faktor> aus und ist viel praktischer.