PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Package optional // Anpassung der Schrift



André25
07-05-2012, 19:08
Hallo zusammen!

Ich versuche gerade den mit gleichnamigem Paket optional eingeblendeten Text in seinem Aussehen zu verändern. Das hat praktische Relevanz und ich versuche dabei etwas die Tiefen von TeX zu verstehen.

Nachdem ich das Paket eingebunden habe und Text entsprechend ausgezeichnet habe,


\usepackage[Anmerkung]{optional}
[...]
\opt{Anmerkung}{Dies ist eine Anmerkung, die klein und rot erscheinen soll.}

wollte ich die Anpassung vornehmen. Dazu habe ich zwei Ansätze, die beide nicht so funktionieren, wie ich das gern hätte.


%Variante 1
\let\saveopt\opt%
\renewcommand{\opt}[2]%
{\saveopt{#1}{\tiny\textcolor{red}{#2}}}

%Variante 2
\newcommand{\optA}[2]{\opt{#1}{\tiny\textcolor{red}{#2}}}


Variante 1 soll \opt umdefinieren. Und mit Variante 2 wird ein neuer Befehl \optA angelegt. In beiden Fällen wird der restliche Absatz ebenso wie diese Definition formatiert.

Kann mir jemand sagen, wo das Problem dabei liegt, dass der restliche Absatz die gleiche Formatierung erhält?

Besten Dank und liebe Grüße,

André :)

cgnieder
08-05-2012, 10:51
Beide Varianten gehen schief, da \tiny nicht lokal bleibt. Wenn Du das in das zweite Argument von \textcolor mit rein schreibst, dann funktionieren beide.


\newcommand{\optA}[2]{\opt{#1}{\textcolor{red}{\tiny#2}}}

Folgende Definition würde noch mehr Flexibilität bieten:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[Anmerkung]{optional}
\usepackage{xcolor}

\makeatletter
\renewcommand*\opt[1]{\if\Opl@notlisted{#1}\expandafter\@gobble
\else \expandafter\my@opt \fi}
\newcommand\my@opt[2][red]{\textcolor{#1}{\optformat#2}}
\newcommand*\optformat{\tiny}
\makeatother

\begin{document}

Text \opt{Anmerkung}{Dies ist eine Anmerkung, die klein und rot erscheinen soll.} und mehr Text.

\renewcommand*\optformat{\small}
Text \opt{Anmerkung}[green]{nicht so klein und grün} und mehr Text.

\end{document}

Gruß

André25
08-05-2012, 14:06
Hey Clemens!

Danke, das sieht echt gut aus. Wo und wie kann man diese Befehle lernen, die zu Deiner zweiten Variante geführt haben?

Danke und viele Grüße,

André :)

cgnieder
08-05-2012, 14:14
Ich hab in optional.sty die Definition von \opt nachgeschlagen:


\newcommand*\opt[1]{\if\Opl@notlisted{#1}\expandafter\@gobble
\else \expandafter\@firstofone \fi}

Man sieht, dass der Befehl gar nicht zwei sondern nur ein Argument hat. Wenn das ein Argument ist, das eine valide Option darstellt, dann wird das folgende Argument angezeigt (\@firstofone), sonst wird es verschluckt (\@gobble). Die beiden zuletzt genannten Befehle sind im LaTeX-Kernel (http://texdoc.net/pkg/source2e) definiert:


\long\def\@gobble#1{}
\long\def\@firstofone#1{#1}

Ich habe dann lediglich \@firstofone durch den neuen Befehl ersetzt.

Gruß

André25
08-05-2012, 17:52
Danke Clemens! Das bringt mich dem im ersten Beitrag genannten Ziel, die Tiefen von TeX zu verstehen, etwas näher.

Viele Grüße, André :cool: