von iTob » Do 12. Aug 2010, 18:30
Hallo
ich versuche gerade, mir ein eigenes Paket zu bauen und habe eine Frage zu den Optionen:
[Minimalbeispiel am Ende des Codes...]
Ich würde gerne alle Optionen der in mein Paket eingebundenen Pakete mit
\usepackage[hier alle Optionen]{mypkg} % Befehl in der Präambel von test.tex
aufrufen können.
Das ist mir zum teil auch schon gelungen durch
\DeclareOptions*{\PassOptionsToPackage{\CurrentOption}{paket1}} % Befehl in mypkg.sty
wobei paket1 mit
\RequirePackage[optionen]{paket1} % Befehl in mypkg.sty
aufgerufen wird und alle Optionen annimmt, die ich mypgk in test.tex und paket1 in mypgk.sty übergebe. Dazu muss ich auch die Optionen, die ich mir nicht selbst ausgedachte habe, sondern der Entwickler von paket1 nicht erneut mit
erzeugen, sondern kann diese einfach ändern. Soweit so schön, aber jetzt stoße ich auf zwei Probleme:
Problem 1: Wenn ich jetzt – mal angenommen ich (als Fremdanwender) wüsste nicht, dass mypkg paket1 lädt – in test.tex mit
das Paket so zusagen nochmal einbinde, führt das zu der Fehlermeldung:
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.13 \usepackage
[%
?
! You can't use `macro parameter character #' in horizontal mode.
\in@ #1#2->\def \in@@ ##1#1##
2##3\in@@ {\ifx \in@ ##2\in@false \else \in@tru...
l.13 \usepackage
[%
?
! You can't use `macro parameter character #' in horizontal mode.
\in@ #1#2->\def \in@@ ##1#1##2##
3\in@@ {\ifx \in@ ##2\in@false \else \in@tru...
l.13 \usepackage
[%
?
! Extra \else.
<argument> ...tput-decimal-marker=|,}\ifin@ \else
\let \reserved@a \@secondo...
l.13 \usepackage
[%
?
! Extra \fi.
\@for ... \@forloop #2,\@nil ,\@nil \@@ #1{#3}\fi
l.13 \usepackage
[%
?
! LaTeX Error: Option clash for package siunitx.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.13 \usepackage
[%
?
(./test.aux) [1] (./test.aux) )
Output written on test.dvi (1 page, 484 bytes).
Transcript written on test.log.
nicht. Statt dessen meldet paket2, dass es eine Option nicht kennt – klar, wenn diese zu paket1 gehört. In meinem Fall beschwert sich komischer Weise paket1 aber nicht über Optionen, die zu paket2 gehören. Konkret geht es um die Pakete lcg (=2) und siunitx (=1).
So und hier das
Minimalbeispiel:
\begin{filecontents*}{mypkg.sty}
%%%%% Kenndaten
\ProvidesPackage{mypkg}[2010/08/12]
\NeedsTeXFormat{LaTeX2e}[2009/01/01]
%%%%% Initialisierung
%%%%% Deklarieren von Optionen
\DeclareOption{noautosolution}{\setboolean{@utosol}{false}} % neue Option, mit der das Anhängen der Lösung verhindert wird
\DeclareOption*{%
\PassOptionsToPackage{\CurrentOption}{siunitx} % Reicht undefinierte Optionen an siunitx weiter, hat keine Probleme mit lcg-Optionen und unbekannten Optionen [Problem 2]
% \PassOptionsToPackage{\CurrentOption}{lcg} % Sollte unbekannte Optionen an lcg weitergeben, macht aber Probleme mit siunitx-Optionen [Problem 2]
}
%%%%% Ausführen von Optionen
\ProcessOptions
%%%%% Laden von Paketen
\RequirePackage[
output-decimal-marker = {|} % Hier lassen sich die Optionen ebefalls setzen
]{siunitx}
\RequirePackage[%
first=4, % Hier lassen sich die Optionen setzten
last = 6
]{lcg}
%%%%% Haupteil
% keine Definitionen für dieses Bsp...
\end{filecontents*}
\documentclass[11pt,a4paper]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[%
noautosolve, % Option für mypkg
output-decimal-marker = {;}, % Option für siunitx
first=0, % Option für lcg
last=3, % Option für lcg
dfggjh, % völlig frei erfunden, allenn Paketen unbekannt
]{mypkg}
\usepackage[%
%output-decimal-marker = {*}, % Hier lassen sich die Optionen nicht setzten [Problem 1]
]{siunitx}
\usepackage[%
%first=7, % Hier lassen sich die Optionen nicht setzten [Problem 1]
%last=10
]{lcg}
\sisetup{output-decimal-marker = {!}} % Setzen von Optionen mit diesem Befehl geht, an dieser Stelle letzte Definition, so dass ! verwendet wird
\begin{document}
\section*{Pakettest}
Reiner num-Befehl: \num{2.35}
num-Befehl mit in Befehlsoption gesetztem Dezimalmarker
\num[output-decimal-marker = {,}]{1.45} % hier lässt sich die Option auch setzten, wodurch ! noch mal durch , ersetzt wird
\end{document}
Vielen Dank und Grüße
Tobi
Hallo :-)
ich versuche gerade, mir ein eigenes Paket zu bauen und habe eine Frage zu den Optionen:
[Minimalbeispiel am Ende des Codes...]
Ich würde gerne alle Optionen der in mein Paket eingebundenen Pakete mit
[code]\usepackage[hier alle Optionen]{mypkg} % Befehl in der Präambel von test.tex[/code]
aufrufen können.
Das ist mir zum teil auch schon gelungen durch
[code]\DeclareOptions*{\PassOptionsToPackage{\CurrentOption}{paket1}} % Befehl in mypkg.sty[/code]
wobei paket1 mit
[code]\RequirePackage[optionen]{paket1} % Befehl in mypkg.sty[/code]
aufgerufen wird und alle Optionen annimmt, die ich mypgk in test.tex und paket1 in mypgk.sty übergebe. Dazu muss ich auch die Optionen, die ich mir nicht selbst ausgedachte habe, sondern der Entwickler von paket1 nicht erneut mit
[code]\DeclareOption{...}{...}[/code]
erzeugen, sondern kann diese einfach ändern. Soweit so schön, aber jetzt stoße ich auf zwei Probleme:
[b]Problem 1:[/b] Wenn ich jetzt – mal angenommen ich (als Fremdanwender) wüsste nicht, dass mypkg paket1 lädt – in test.tex mit
[code]\usepackage[opt]{paket1}[/code]
das Paket so zusagen nochmal einbinde, führt das zu der Fehlermeldung:
[code]! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.13 \usepackage
[%
?
! You can't use `macro parameter character #' in horizontal mode.
\in@ #1#2->\def \in@@ ##1#1##
2##3\in@@ {\ifx \in@ ##2\in@false \else \in@tru...
l.13 \usepackage
[%
?
! You can't use `macro parameter character #' in horizontal mode.
\in@ #1#2->\def \in@@ ##1#1##2##
3\in@@ {\ifx \in@ ##2\in@false \else \in@tru...
l.13 \usepackage
[%
?
! Extra \else.
<argument> ...tput-decimal-marker=|,}\ifin@ \else
\let \reserved@a \@secondo...
l.13 \usepackage
[%
?
! Extra \fi.
\@for ... \@forloop #2,\@nil ,\@nil \@@ #1{#3}\fi
l.13 \usepackage
[%
?
! LaTeX Error: Option clash for package siunitx.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.13 \usepackage
[%
?
(./test.aux) [1] (./test.aux) )
Output written on test.dvi (1 page, 484 bytes).
Transcript written on test.log.[/code]
nicht. Statt dessen meldet paket2, dass es eine Option nicht kennt – klar, wenn diese zu paket1 gehört. In meinem Fall beschwert sich komischer Weise paket1 aber nicht über Optionen, die zu paket2 gehören. Konkret geht es um die Pakete lcg (=2) und siunitx (=1).
So und hier das [b]Minimalbeispiel[/b]:
[code]\begin{filecontents*}{mypkg.sty}
%%%%% Kenndaten
\ProvidesPackage{mypkg}[2010/08/12]
\NeedsTeXFormat{LaTeX2e}[2009/01/01]
%%%%% Initialisierung
%%%%% Deklarieren von Optionen
\DeclareOption{noautosolution}{\setboolean{@utosol}{false}} % neue Option, mit der das Anhängen der Lösung verhindert wird
\DeclareOption*{%
\PassOptionsToPackage{\CurrentOption}{siunitx} % Reicht undefinierte Optionen an siunitx weiter, hat keine Probleme mit lcg-Optionen und unbekannten Optionen [Problem 2]
% \PassOptionsToPackage{\CurrentOption}{lcg} % Sollte unbekannte Optionen an lcg weitergeben, macht aber Probleme mit siunitx-Optionen [Problem 2]
}
%%%%% Ausführen von Optionen
\ProcessOptions
%%%%% Laden von Paketen
\RequirePackage[
output-decimal-marker = {|} % Hier lassen sich die Optionen ebefalls setzen
]{siunitx}
\RequirePackage[%
first=4, % Hier lassen sich die Optionen setzten
last = 6
]{lcg}
%%%%% Haupteil
% keine Definitionen für dieses Bsp...
\end{filecontents*}
\documentclass[11pt,a4paper]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[%
noautosolve, % Option für mypkg
output-decimal-marker = {;}, % Option für siunitx
first=0, % Option für lcg
last=3, % Option für lcg
dfggjh, % völlig frei erfunden, allenn Paketen unbekannt
]{mypkg}
\usepackage[%
%output-decimal-marker = {*}, % Hier lassen sich die Optionen nicht setzten [Problem 1]
]{siunitx}
\usepackage[%
%first=7, % Hier lassen sich die Optionen nicht setzten [Problem 1]
%last=10
]{lcg}
\sisetup{output-decimal-marker = {!}} % Setzen von Optionen mit diesem Befehl geht, an dieser Stelle letzte Definition, so dass ! verwendet wird
\begin{document}
\section*{Pakettest}
Reiner num-Befehl: \num{2.35}
num-Befehl mit in Befehlsoption gesetztem Dezimalmarker
\num[output-decimal-marker = {,}]{1.45} % hier lässt sich die Option auch setzten, wodurch ! noch mal durch , ersetzt wird
\end{document}[/code]
Vielen Dank und Grüße
Tobi