Hallo,

ich versuche gerade für eine LaTeX Klasse ein paar schöne Randnotizen in TikZ zu gestalten. Das hat soweit auch ganz gut geklappt, allerdings gefällt mir die Position nicht und ich weiß nicht wie ich diese ändern kann. Hier erst mal der Code der Marginpars:

Open in writeLaTeX
\newcommand{\marginnote}[1]{%
    \marginpar{%
        \begin{tikzpicture}%
            \node[shape=rectangle, draw=maincolor, fill=maincolor!10, rounded corners, inner sep=5pt, thick, text width=0.95\marginparwidth] {#1};%
        \end{tikzpicture}%
    }%
}

In Action sieht es wie folgt aus:

alt text

Der Befehl für marginnote wurde nach dem Text rechts angegeben. Ich hätte es gerne, dass entweder die obere Kante (anchor=north) mit der Zeile übereinstimmt, in der ich den Befehl setze oder dass sie zentriert (anchor=center) mit der Zeile übereinstimmt.

Leider weiß ich nicht wie genau ich das machen soll und wäre über jeden Tipp dankbar.

gefragt 22 Feb '14, 00:14

funkytex's gravatar image

funkytex
177337
Akzeptiert-Rate: 0%

bearbeitet 15 Mär '14, 03:18

welle's gravatar image

welle
106222631

Das Paket todonotes könnte Dich interessieren.

(16 Mär '14, 21:10) Henri

Für die Änderung der Position kannst du die Option baseline für das tikzpicture nutzen. Diese gibt an, welcher Punkt des Bildes auf der Grundlinie der Umgebung eingefügt wird. Weitere Infos dazu findest Du im pgfmanual.

Zum Zentrieren der marginnote gegenüber der Grundlinie der aktuellen Zeile lässt sich die Node current bounding box mit dem Anker center verwenden:

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß}}
\usepackage[ngerman]{babel} 
\usepackage[marginparwidth=3.5cm,right=4.5cm]{geometry}

\usepackage{tikz}
\colorlet{maincolor}{red}

\newcommand{\marginnote}[1]{%
  \marginpar{%
    \begin{tikzpicture}[
      baseline=(current bounding box.center),
      ]
      \node[draw=maincolor, fill=maincolor!10,
        rounded corners,inner sep=5pt,thick,
        text width=\linewidth-10pt-\pgflinewidth,
        ] {\strut#1\strut};
    \end{tikzpicture}%
  }%
}

\usepackage{blindtext}% Fülltext
\usepackage{showframe}% Seitenaufteilung

\begin{document}
\blindtext In dieser Zeile folgt dann noch am Rand eine Randnotiz mit wichtigem Inhalt.
\marginnote{Dies ist eine ganz wichtige Randno\-tiz.}
\hrulefill
\end{document}

alt text

Wenn man aber bei einer ungeraden Anzahl Zeilen die mittelste auf Höhe der eigentlichen Textzeile haben möchte, dann ist es besser eine Hilfsnode mit dem Inhalt strut in der Mitte zu platzieren und deren base Anker zum Einfügen des Bildes auf der Grundlinie zu verwenden.

Open in writeLaTeX
\newcommand{\marginnote}[1]{%
  \marginpar{%
    \begin{tikzpicture}[
        baseline=(mp.base),
        every node/.style={rounded corners,inner sep=5pt,thick}
      ]
      \node(mp){\strut};
      \node[draw=maincolor, fill=maincolor!10,
        text width=\linewidth-10pt-\pgflinewidth,
        ] {\strut#1\strut};
    \end{tikzpicture}%
  }%
}

alt text

Ändert man jetzt den Anker der eigentlichen Node und der Hilfsnode auf north, dann wird die erste Zeile der Randnotiz auf gleicher Höhe wie die eigentliche Textzeile ausgegeben:

Open in writeLaTeX
\newcommand{\marginnote}[1]{%
  \marginpar{%
    \begin{tikzpicture}[
        baseline=(mp.base),
        every node/.style={rounded corners,inner sep=5pt,thick,
          anchor=north
        }
      ]
      \node(mp){\strut};
      \node[draw=maincolor, fill=maincolor!10,
        text width=\linewidth-10pt-\pgflinewidth,
        ] {\strut#1\strut};
    \end{tikzpicture}%
  }%
}

alt text

Die maximal mögliche Breite des Randnotizentextes erhält man übrigens, wenn man von \marginparwidth oder \linewidth das Doppelte des inner sep der Node (bei Dir also 10pt) und \pgflinewidth abzieht.

Permanenter link

beantwortet 22 Feb '14, 02:55

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 22 Feb '14, 02:56

Vielen Dank, Problem gelöst. Bei deiner Lösung sind noch Sachen dabei die ich nicht kannte, die werde ich mir nochmal genauer anschauen.

(22 Feb '14, 13:43) funkytex
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×76
×41
×6

gestellte Frage: 22 Feb '14, 00:14

Frage wurde gesehen: 12,232 Mal

zuletzt geändert: 16 Mär '14, 21:10