PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler bei \marginpar



psyman
29-06-2011, 07:42
Hallo,

mein erster Eintrag hier, bis jetzt konnte mir google immer weiterhelfen.
Ich habe mit meine eigenen Randnotizen gestalltet. Bei denen eine Trennlinie zum normalen Text erscheint, und je nach position vom Text links- bzw. rechtsbündig erscheinen. Soweit ist das auch kein Problem gewesen.
Jetzt wollte ich die Randnotizen noch richtig positionieren, damit die Notiz in der Zeile beginnt in der ich sie haben möchte. Leider gibt es hier ein kleines Problem, ich bekomme 11 Fehler

Ich habe mal ein Minimalbeispiel erstellt:



\documentclass[12pt, twoside, openright]{scrbook}% Klassen: scrartcl, scrreprt, scrbook
\usepackage{setspace}
\usepackage[ngerman]{babel} % Languagesetting
\usepackage{calc}

\newcommand{\mlinerule}[1]{
\marginpar[ % optionaler Parameter für die Rückseite (gerade Seitenzahl) im zweiseitigen Layout
\begin{spacing}{1} % Zeilenabstand auf 1 setzen
\begin{tabular}[t] % tabular um Trennline zu erzeugen
{@{} p{\marginparwidth-4pt}@{ }|@{}} % Block definieren mit einer Linie rechts
\scriptsize % Schriftgröße anpassen
\vspace{-2\baselineskip} % Text muss nach oben geschoben werden
\flushright{#1} % Rechtsbündig ausgeben
\end{tabular}
\end{spacing}]{
\begin{spacing}{1} % Zeilenabstand auf 1 setzen
\begin{tabular}[t] % tabular um Trennline zu erzeugen
{@{}|@{ }p{\marginparwidth-4pt}@{}} % Block definieren mit einer Linie rechts
\scriptsize % Schriftgröße anpassen
\vspace{-2\baselineskip} % Text muss nach oben geschoben werden
\flushleft{#1} %linksbündig ausgeben
\end{tabular}
\end{spacing}}}
\begin{document}

Hier steht ein Text zu dem eine Randnotiz gehört.\mlinerule{Hier steht die Randnotiz}

\end{document}

Der Fehler liegt anscheinend bei \marginpar im optionalen Argument. Wenn ich dort den Parameter [t] bei der Tabular-Umgebung(Zeile 9) weg lasse, lässt es sich fehlerfrei übersetzen. Komischerweise stört ihn der Parameter nicht in Zeile 17.

Xenara
29-06-2011, 08:01
Ich weiss nicht genau, wieso, aber wenn man um den Inhalt des optionalen Arguments zusätzlich geschweifte Klammern setzt, klappts:


\documentclass[12pt, twoside, openright]{scrbook}% Klassen: scrartcl, scrreprt, scrbook
\usepackage{setspace}
\usepackage[ngerman]{babel} % Languagesetting
\usepackage{calc}

\newcommand{\mlinerule}[1]{
\marginpar%
[% optionaler Parameter für die Rückseite (gerade Seitenzahl) im zweiseitigen Layout
{%
\begin{spacing}{1} % Zeilenabstand auf 1 setzen
\begin{tabular}[t]% tabular um Trennline zu erzeugen
{@{} p{\marginparwidth-4pt}@{ }|@{}} % Block definieren mit einer Linie rechts
\scriptsize % Schriftgröße anpassen
\vspace{-2\baselineskip} % Text muss nach oben geschoben werden
\flushright{#1} % Rechtsbündig ausgeben
\end{tabular}%
\end{spacing}
}%
]%
{%
\begin{spacing}{1} % Zeilenabstand auf 1 setzen
\begin{tabular}[t] % tabular um Trennline zu erzeugen
{@{}|@{ }p{\marginparwidth-4pt}@{}} % Block definieren mit einer Linie rechts
\scriptsize % Schriftgröße anpassen
\vspace{-2\baselineskip} % Text muss nach oben geschoben werden
\flushleft{#1} %linksbündig ausgeben
\end{tabular}
\end{spacing}%
}%
}


\begin{document}

Hier steht ein Text zu dem eine Randnotiz gehört.\mlinerule{Hier steht die Randnotiz}

\end{document}

tral
29-06-2011, 08:52
Ich weiss nicht genau, wieso, aber wenn man um den Inhalt des optionalen Arguments zusätzlich geschweifte Klammern setzt, klappts:


Weil marginpar sonst nach [t] (an der ersten schließenden eckigen Klammer) denkt, sein optionales Argument ist zu Ende. Das muss man dadurch verhindern, dass man [t] innerhalb eines Blocks benutzt, wie du es ja getan hast...

Christian.

Xenara
29-06-2011, 10:49
@tral: Vielen Dank für die Erklärung! Eigentlich ist das ja logisch, hätte ich auch selbst drauf kommen können.

psyman
29-06-2011, 16:37
Danke.:D

Auf sowas bin ich nicht gekommen.
Ich hatte mir grad nen workaround gebastellt.



\newcommand{\mlinerule}[1]{
\marginpar{
\vspace{-0.7\baselineskip} % eine kleine Korrektur ist nötig
\ifthenelse{\boolean{@twoside}} % Erst mal schauen wir ob ein zweiseitiges Layout verwendet wird
{ % Zweiseitiges Layout
\ifthispageodd % Befinden wir uns auf der Vorder oder Rückseite?
{ % Vorderseite
\begin{spacing}{1} % Zeilenabstand auf 1 setzen
\begin{tabular}[t] % tabular um Trennline zu erzeugen
{@{}|@{ }p{\marginparwidth-0pt}@{}} % Block definieren mit einer Linie rechts
\scriptsize % Schriftgröße anpassen
\vspace{-2\baselineskip} % Text muss nach oben geschoben werden
\flushleft{#1} %linksbündig ausgeben
\end{tabular}
\end{spacing}
}
{ % Rückseite
\begin{spacing}{1} % Zeilenabstand auf 1 setzen
\begin{tabular}[t] % tabular um Trennline zu erzeugen
{@{} p{\marginparwidth-0pt}@{ }|@{}} % Block definieren mit einer Linie rechts
\scriptsize % Schriftgröße anpassen
\vspace{-2\baselineskip} % Text muss nach oben geschoben werden
\flushright{#1} % Rechtsbündig ausgeben
\end{tabular}
\end{spacing}
}
}
{ % Einseitiges Layout
\begin{spacing}{1} % Zeilenabstand auf 1 setzen
\begin{tabular}[t] % tabular um Trennline zu erzeugen
{@{}|@{ }p{\marginparwidth-0pt}@{}} % Block definieren mit einer Linie rechts
\scriptsize % Schriftgröße anpassen
\vspace{-2\baselineskip} % Text muss nach oben geschoben werden
\flushleft{#1} %linksbündig ausgeben
\end{tabular}
\end{spacing}
}}}


Aber wie man sieht, nicht sehr schön die Lösung.