goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Direktlinks:
Zuletzt aktive Beiträge
Unbeantwortete Beiträge
[Erweitert]

Forenstatistik:
Beiträge: 83531
Top-Poster: Johannes_B (4674)

Wir begrüßen unseren neuesten Benutzer timroh.

Partner:


goLaTeX.de wird gefördert durch DANTE e.V.: Deutschsprachige Anwendervereinigung TeX





Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Randnotizen und Multicol (zweispaltig)

 

IRM
Forum-Anfänger
Forum-Anfänger

Beiträge: 20
Anmeldedatum: 11.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2016, 07:14     Titel: Randnotizen und Multicol (zweispaltig)
  Antworten mit Zitat      
Guten Morgen Smile

Ich möchte gerne mein Buch (600 Seiten) zweispaltig erstellen und verwende aber viele kurze Randnotizen (Zahlen und Zeichen wie zb. ++).
Leider ist ja \marginline nicht möglich bei multicol. Ich muss da also einiges ändern. Im Internet habe ich eine Bastellösung gefunden. Gibt es hier eine Möglichkeit den Befehl so aufzurufen, dass die Variable a automatisch eins hochgezählt wird? Also am Ende wäre ein Befehl \Randspalte{Text} sehr schön. Die Variante mit {a:Zahl}{Text} ist sehr unhandlich, da in langen Dokumenten sich immer wieder Dinge verschieben und dann die Zahlen auch nicht mehr chronologisch wären. Schonmal vielen Dank!!

Code • Öffne in Overleaf

\documentclass{article}
\usepackage{multicol,zref-savepos}
\usepackage{blindtext}
\def\putmarginpar#1#2{%
  \zsavepos{#1}%
  \ifnum20432158>\number\zposx{#1}%
     \hbox to 0pt{\hskip\dimexpr-\zposx{#1}sp +0.5cm \relax#2}%
  \else
      \hbox to 0pt{\hskip4cm #2}%
  \fi%
}
\parskip0pt
\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

%\zsavepos{dd}\zposx{dd}
\end{multicols}
 
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2016, 07:39     Titel:
  Antworten mit Zitat      
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
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2016, 17:39     Titel:
  Antworten mit Zitat      
Danke für Deine Hilfe!
Du hast aber unten bei den Aufrufen nichts geändert.. Wie schreibe ich nun Text in die Randspalte? \putmarginpar{Text} geht bei mir nicht.
P.S: In dem Beispiel fehlte die letzte Zeile daher war es nicht lauffähig. Sorry.

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}
\end{document}
 

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2016, 17:46     Titel:
  Antworten mit Zitat      
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
Forum-Anfänger

Beiträge: 20
Anmeldedatum: 11.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2016, 21:20     Titel:
  Antworten mit Zitat      
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}
 
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2016, 08:12     Titel:
  Antworten mit Zitat      
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 Paket auf CTANzref berechnet werden. Da es aber in Paket auf CTANzref 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
Forum-Anfänger

Beiträge: 20
Anmeldedatum: 11.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2016, 21:02     Titel:
  Antworten mit Zitat      
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}
 
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2016, 09:12     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 11.11.2016, 10:02     Titel:
  Antworten mit Zitat      
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
Forum-Anfänger

Beiträge: 20
Anmeldedatum: 11.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2016, 03:08     Titel: Schöne Weihnachten und Nachfrage
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen Gehe zu Seite 1, 2  Weiter



Options and Permissions
Beiträge der letzten Zeit anzeigen:

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
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de