|
Beiträge: 91357
Top-Poster: Johannes_B (4929)
Wir begrüßen unseren neuesten Benutzer zu22.
|
|
|
|
Randnotizen und Multicol (zweispaltig) |
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.11.2016, 08:39
Titel:
|
 |
Klar. Man braucht dafür nun einen Zähler: Code • Öffne in Overleaf | \documentclass{article}
\usepackage{multicol,zref-savepos}
\usepackage{blindtext}
\newcounter{mparnum}
\renewcommand*{\themparnum}{a:\arabic{mparnum}}
\def\putmarginpar#1#2 {%
\stepcounter{mparnum}%
\zsavepos{\themparnum}%
\ifnum20432158> \number\zposx{\themparnum}%
\hbox to 0pt {\hskip\dimexpr-\zposx{\themparnum}sp +0.5cm \relax#2 }%
\else
\hbox to 0pt {\hskip4cm #2}%
\fi%
}
\begin{document}
\begin{multicols}{2}
Testing \putmarginpar{a:1}{First} of something that is very long and if it need be can be set somewhere
\putmarginpar{a:2}{Second}, where it can be subsequently found or lost \blindtext
\putmarginpar{a:3}{Third.}
\blindtext
\putmarginpar{a:4}{vier}
\blindtext
\end{multicols} |
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.11.2016, 18:46
Titel:
|
 |
So scheint es zu gehen! Vielen Dank!
Code • Öffne in Overleaf |
\documentclass{article}
\usepackage{multicol,zref-savepos}
\usepackage{blindtext}
\newcounter{mparnum}
\renewcommand*{\themparnum}{a:\arabic{mparnum}}
\def\putmarginpar#1 {%
\stepcounter{mparnum}%
\zsavepos{\themparnum}%
\ifnum20432158> \number\zposx{\themparnum}%
\hbox to 0pt {\hskip\dimexpr-\zposx{\themparnum}sp +0.5cm \relax#1 }%
\else
\hbox to 0pt {\hskip4cm #1}%
\fi%
}
\begin{document}
\begin{multicols}{2}
Testing \putmarginpar{First} of something that is very long and if it need be can be set somewhere
\putmarginpar{Second}, where it can be subsequently found or lost \blindtext
\putmarginpar{Third.}
\blindtext
\putmarginpar{vier}
\blindtext
\end{multicols}
\end{document}
|
|
|
|
IRM |

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.11.2016, 22:20
Titel:
|
 |
Leider geht es doch nicht in meinem Dokument. Ich verwende die Komascript-Klasse "scrbook". Gibt es eine Möglichkeit das Beispiel dafür anzupassen?
Code • Öffne in Overleaf |
\documentclass{scrbook}
\usepackage{multicol,zref-savepos}
\usepackage{blindtext}
\newcounter{mparnum}
\renewcommand*{\themparnum}{a:\arabic{mparnum}}
\def\putmarginpar#1 {%
\stepcounter{mparnum}%
\zsavepos{\themparnum}%
\ifnum20432158> \number\zposx{\themparnum}%
\hbox to 0pt {\hskip\dimexpr-\zposx{\themparnum}sp +0.5cm \relax#1 }%
\else
\hbox to 0pt {\hskip4cm #1}%
\fi%
}
\begin{document}
\begin{multicols}{2}
Testing \putmarginpar{First} of something that is very long and if it need be can be set somewhere
\putmarginpar{Second}, where it can be subsequently found or lost \blindtext
\putmarginpar{Third.}
\blindtext
\putmarginpar{vier}
\blindtext
\end{multicols}
\end{document}
|
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.11.2016, 09:12
Titel:
|
 |
|
 |
|
Du hast ein doppelseitiges Dokument mit ganz anderen Randeinstellungen. Logischerweise kannst du dabei nicht mehr mit statischen Werten sowohl für die Ermittlung der Entscheidungsposition zwischen den Spalten als auch für die Verschiebung in den Rand arbeiten. Hier einmal ein Beispiel, bei dem die Positionen ebenfalls mit Hilfe von zref berechnet werden. Da es aber in zref AFAIK kein Makro für die Breite des linken bzw. rechten Randes gibt, habe ich für den Text im linken Rand jeweils die Breite des zu platzierenden Textes verwendet. Damit ist der Text links rechtsbündig platziert: Code • Öffne in Overleaf | \documentclass{scrbook}
\usepackage{multicol,zref-savepos,zref-abspos}
\usepackage{blindtext}
\newcounter{mparnum}
\renewcommand*{\themparnum}{a:\arabic{mparnum}}
\makeatletter
\def\putmarginpar#1 {%
\stepcounter{mparnum}%
\zsavepos{\themparnum}%
\settowidth{\@tempdima}{#1}%
\ifnum \numexpr\ZREF@abspos@body@x@center {\themparnum}\relax> \number\zposx{\themparnum}%
\hbox to 0pt {\hskip\numexpr-\zposx{\themparnum} + \ZREF@abspos@body@x@left {\themparnum} - \zref@extract {\themparnum}{marginparsep} - \@tempdima \relax sp#1 }%
\else
\hbox to 0pt {\hskip\numexpr-\zposx{\themparnum} + \ZREF@abspos@body@x@right {\themparnum} + \zref@extract {\themparnum}{marginparsep} \relax sp #1 }%
\fi%
}
\makeatother
\begin{document}
\begin{multicols}{2}
Testing \putmarginpar{First} of something that is very long and if it need be can be set somewhere
\putmarginpar{Second}, where it can be subsequently found or lost \blindtext
\putmarginpar{Third.}
\blindtext
\putmarginpar{vier oder so}
\blindtext
\end{multicols}
\clearpage
\begin{multicols}{2}
Testing \putmarginpar{First} of something that is very long and if it need be can be set somewhere
\putmarginpar{Second}, where it can be subsequently found or lost \blindtext
\putmarginpar{Third.}
\blindtext
\putmarginpar{vier oder so}
\blindtext
\end{multicols}
\end{document} |
Wie man an dem Beispiel auch sieht, wird es kritisch, wenn der innere Rand schmal ist. Dann passt einfach kein längerer Text und ragt damit in den Rand.
Bei einem doppelseitigen Dokument sind Randnotizen am inneren Rand eigentlich nur sinnvoll, wenn man mit sehr, sehr breiten Rändern bzw. asymmetrischem Rändern arbeitet. Für ein normales Dokument sollte man das vermeiden, bzw. auch für die innere Spalte die Randnotizen in den äußeren Rand setzen. Am inneren Rand kann man allenfalls eine kleine Markierung unterbringen.
|
|
|
IRM |

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2016, 22:02
Titel:
|
 |
|
 |
|
Nochmals Vielen Dank!
Leider tritt nochmal ein Fehler auf. Auf einer neuen Seite wird die Randnotiz manchmal zu weit außen oder innen (über dem Text) plaziert.
Ich habe versucht ein Minimalbeispiel zu erstellen bei dem der Fehler auftritt. Scheinbar klappt hier die Berechnung nicht. Wie läßt sich das lösen?
Code • Öffne in Overleaf |
\documentclass{scrbook}
\usepackage{multicol, zref-savepos,zref-abspos,blindtext}
\newcounter{mparnum}
\renewcommand*{\themparnum}{a:\arabic{mparnum}}
\makeatletter
\def\putmarginpar#1 {%
\stepcounter{mparnum}%
\zsavepos{\themparnum}%
\settowidth{\@tempdima}{#1}%
\ifnum \numexpr\ZREF@abspos@body@x@center {\themparnum}\relax> \number\zposx{\themparnum}%
\hbox to 0pt {\hskip\numexpr-\zposx{\themparnum} + \ZREF@abspos@body@x@left {\themparnum} - \zref@extract {\themparnum}{marginparsep} - \@tempdima \relax sp#1 }%
\else
\hbox to 0pt {\hskip\numexpr-\zposx{\themparnum} + \ZREF@abspos@body@x@right {\themparnum} + \zref@extract {\themparnum}{marginparsep} \relax sp #1 }%
\fi%
}
\makeatother
\newcommand{\Randnotiz}[1]{\putmarginpar{#1}}
\newcounter{mynumber}
\setcounter{mynumber}{0}
\newcommand{\Frage}[1]
{%
\addtocounter{mynumber}{1}%
\minisec{\small{Frage:}\Randnotiz{\arabic{mynumber}}}
\vskip- \parskip%
#1 \par
}
\begin{document}
\begin{multicols}{2}
\Frage{First} of something that is very long and if it need be can be set somewhere
\Frage{Second}, where it can be subsequently found or lost
\Frage{Third.}
\blindtext
\blindtext
\blindtext
\blindtext
Irgendein Text zum testen das ist ein alternativer Text
Irgendein Text zum testen das ist ein alternativer Text
Irgendein Text zum testen das ist ein alternativer Text
\Frage{vier}
\blindtext
\Frage{Fünf}
\blindtext
\Frage{sechs}
\blindtext
\Frage{sieben}
\blindtext
\Frage{acht}
\blindtext
\end{multicols}
\end{document}
|
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.11.2016, 10:12
Titel:
|
 |
|
 |
|
Offenbar versagt da zref unmittelbar beim Seitenumbruch bei der Ermittlung der Randposition. Warum das so ist, musst du schon den Autor des Pakets fragen.
Du kannst versuchen, stattdessen mit \ifthispageodd (KOMA-Script), \marginnote (gleichnamiges Paket) und \reversemarginpar zu arbeiten: Code • Öffne in Overleaf | \documentclass{scrbook}
\usepackage{multicol}
\usepackage{zref-savepos,zref-abspos,blindtext}
\usepackage{marginnote}
\newcounter{mparnum}
\renewcommand*{\themparnum}{a:\arabic{mparnum}}
\makeatletter
\def\putmarginpar#1 {%
\stepcounter{mparnum}%
\zsavepos{\themparnum}%
\settowidth{\@tempdima}{#1}%
\ifnum \numexpr\ZREF@abspos@body@x@center {\themparnum}\relax> \number\zposx{\themparnum}%
\ifthispageodd{\reversemarginpar}{}%
\marginnote{#1}%
\else
\ifthispageodd{}{\reversemarginpar}%
\marginnote{#1}%
\fi%
}
\makeatother
\newcommand{\Randnotiz}[1]{\putmarginpar{#1}}
\newcounter{mynumber}
\setcounter{mynumber}{0}% Kannst du dir sparen, macht \newcounter
\newcommand{\Frage}[1]
{%
\addtocounter{mynumber}{1}%
\minisec{\small{Frage:}% \small kennt kein Argument, Schriftgröße besser allgemein oder in einer Gruppe per \setkomafont{minisec}{…} setzen!
\Randnotiz{\arabic{mynumber}}}
\vskip- \parskip%
#1 \par
}
\begin{document}
\begin{multicols}{2}
\Frage{First} of something that is very long and if it need be can be set somewhere
\Frage{Second}, where it can be subsequently found or lost
\Frage{Third.}
\blindtext
\blindtext
\blindtext
\blindtext
Irgendein Text zum testen das ist ein alternativer Text
Irgendein Text zum testen das ist ein alternativer Text
Irgendein Text zum testen das ist ein alternativer Text
\Frage{vier}
\blindtext
\Frage{Fünf}
\blindtext
\Frage{sechs}
\blindtext
\Frage{sieben}
\blindtext
\Frage{acht}
\blindtext
\end{multicols}
\end{document} |
Bitte beachte auch die Kommentare im Code.
Ob dabei allerdings \ZREF@abspos@body@x@center dann immer die korrekte Position ergibt, weiß ich nicht. Eigentlich müsste zref auch dafür erkennen, ob wir uns auf einer geraden oder ungeraden Seite befinden, was offenbar nicht immer korrekt funktioniert. Also müsste man eventuell schon hier stattdessen mit \ifthispageodd arbeiten und den Referenzpunkt abhängig davon selbst berechnen.
Am besten schickst du den ursprünglichen zref-Code mal an den zref-Autor und fragst ihn, warum das nicht funktioniert.
|
|
|
Auch ein |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.11.2016, 11:02
Titel:
|
 |
|
 |
|
Nachdem das (fälschlich? ich bin nicht Heiko) auch mich per Mail erreicht hat, bin auch ich zu dem Schluss gekommen, dass in zref-abspos.sty ein potentieller Bug enthalten ist. Sowohl in \ZREF@abspos@head@x@left als auch in \ZREF@abspos@marginpar@x@left wird die aktuelle Seite via pagevalue bestimmt. Aufgrund der asynchronen Ausgabe von LaTeX ist allerdings der Wert davon nicht immer die Seitenzahl, auf der das Material bei der Ausgabe landet, sondern die Seitenzahl, auf der das Material gesammelt wird. Im Beispiel ist das für die Marke a:8 noch 2, obwohl die Ausgabe dann auf Seite 3 erfolgt.
Interessanter Weise hat zref mit dem Modul abspage eigentlich das Werkzeug, um dieses Problem zu vermeiden. Man müsste schlicht an den beiden Stellen pagevalue durch abspage ersetzen. Ich vermute, dass das eigentlich auch so geplant war. Die Vermutung kommt daher, dass zref-abspos eine Abhängigkeit von zref-abspage definiert hat, die derzeit real aber gar nicht vorhanden ist.
Langer Rede kurzer Sinn: Aktuelle funktionieren \ZREF@abspos@body@x@left, \ZREF@abspos@body@x@center und ZREF@abspos@body@x@right in allen obigen Beispielen nicht, wie erhofft. Um das zu ändern, muss man patchen: Code • Öffne in Overleaf | \documentclass{scrbook}
\usepackage{multicol}
\usepackage[savepos,pagelayout,abspage]{zref}
\usepackage{zref-abspos}% Warum kann man das eigentlich nicht per zref-Option
% laden?
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\ZREF@abspos@head@x@left}{pagevalue}{abspage}{}{}
\xpatchcmd{\ZREF@abspos@body@x@left}{pagevalue}{abspage}{}{}
\xpatchcmd{\ZREF@abspos@marginpar@x@left}{pagevalue}{abspage}{}{}
\makeatother
\newcounter{mparnum}
\renewcommand*{\themparnum}{a:\arabic{mparnum}}
\makeatletter
\def\putmarginpar#1 {%
\stepcounter{mparnum}%
\zsavepos{\themparnum}%
\settowidth{\@tempdima}{#1}%
\ifnum \numexpr\ZREF@abspos@body@x@center {\themparnum}\relax> \number\zposx{\themparnum}%
\hbox to 0pt {\hskip\numexpr-\zposx{\themparnum} + \ZREF@abspos@body@x@left {\themparnum} - \zref@extract {\themparnum}{marginparsep} - \@tempdima \relax sp#1 }%
\else
\hbox to 0pt {\hskip\numexpr-\zposx{\themparnum} + \ZREF@abspos@body@x@right {\themparnum} + \zref@extract {\themparnum}{marginparsep} \relax sp #1 }%
\fi%
}
\makeatother
\newcommand{\Randnotiz}[1]{\putmarginpar{#1}}
\newcounter{mynumber}
\setcounter{mynumber}{0}
\addtokomafont{minisec}{\small}% Schriftgröße für \minisec ändern
\newcommand{\Frage}[1]
{%
\addtocounter{mynumber}{1}%
\minisec{Frage:\Randnotiz{\arabic{mynumber}}}
\vskip- \parskip% Übler Hack, der sich auf Interna der Klasse stützt!
#1 \par
}
\usepackage{blindtext}
\begin{document}
\begin{multicols}{2}% Warum eigentlich nicht gleich Klassenoption twocolumn?
\Frage{First} of something that is very long and if it need be can be
set somewhere
\Frage{Second}, where it can be subsequently found or lost
\Frage{Third.}
\blindtext
\blindtext
\blindtext
\blindtext
Irgendein Text zum testen das ist ein alternativer Text
Irgendein Text zum testen das ist ein alternativer Text
Irgendein Text zum testen das ist ein alternativer Text
\Frage{vier}
\blindtext
\Frage{Fünf}
\blindtext
\Frage{sechs}
\blindtext
\Frage{sieben}
\blindtext
\Frage{acht}
\blindtext
\end{multicols}
\end{document} |
Sollte irgendwann Heiko zu demselben Schluss kommen, dann werden die drei obigen Patches schlicht wirkungslos. Das Beispiel sollte weiterhin funktionieren.
PS: Den Patch braucht man auch, wenn man auf die Methode mit \ifthispageodd zurückgreift, weil sonst das Ergebnis von \ZREF@abspos@body@x@center unzuverlässig ist.
|
|
|
IRM |

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.02.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.12.2016, 04:08
Titel: Schöne Weihnachten und Nachfrage
|
 |
Ich wünsche allen noch schöne Weihnachten!
Dank Eurer Hilfe funktioniert es nun.
Wie kann ich den Text in den Randspalten etwas näher an meinen Text bringen? Geht das?
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Options and Permissions
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
|
|