goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Randnotizen und Multicol (zweispaltig)

 

Gast
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 12:35     Titel: Gesamtzahl der Fragen am Dokumentenanfang ausgeben?
  Antworten mit Zitat      
Ich würde gerne auf dem Titelblatt oder der nächsten Seite gerne die Anzahl der Fragen im Gesamten Dokument ausgeben. Wie kann man nach der letzten Frage den Zählerstand "mycounter" speichern und dann (im nächsten Lauf?) am Dokumentenanfang ausgeben?

Code • Öffne in Overleaf

\documentclass{scrbook}
\usepackage{multicol}
\usepackage[savepos,pagelayout,abspage]{zref}
\usepackage{zref-abspos}

\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}
   \section{Insgesamt sind es \textbf{\arabic{mynumber}} Fragen.}
   \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
      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: ---
     Beitrag Verfasst am: 25.03.2017, 14:05     Titel:
  Antworten mit Zitat      
mycounter? Gibt es in dem ganzen Beispiel nicht. Wenn du dagegen mynumber mit \refstepcounter erhöhst, kannst du am Ende ein \label setzen und dann mit \ref auf dieses verweisen.

Gast
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 14:27     Titel:
  Antworten mit Zitat      
Danke
Ja, sorry ich meinte mynumber. So wird er aktuell bei jeder Frage erhöht.
Code • Öffne in Overleaf
\addtocounter{mynumber}{1}

Wie kann man auf einen Zähler ein Label setzen?
Ich habe bisher das Label nur für Texstellen oder Grafiken etc. verwendet.

u_fischer
Forum-Meister
Forum-Meister

Beiträge: 3536
Anmeldedatum: 22.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 15:17     Titel:
  Antworten mit Zitat      
Auch ein hat Folgendes geschrieben:
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, ....


Ich denke deine Analyse ist falsch. Da ist zwar ein Fehler, aber der Patch ist nicht korrekt. Das abspos-Modul bestimmt Längen relativ zum Seitenspiegel und der hängt von der "gedruckten" Seitenzahl und nicht von der absoluten Seitenzahl ab. In den meisten Fällen dürfte der Unterschied keine Bedeutung haben, weil normalerweise sowohl die Seitenzahl als auch die absoluten Zahl gleichzeitig ungerade sind, aber wenn sie auseinanderdriften, sollte pagevalue benutzt werden.

Der Fehler in zref-abspos ist, dass pagevalue nicht in der Property-Liste ist und dass zref den Wert nicht verwenden kann und daher auf \number\c@page ausweicht, und das ist wirklich vom asynchronen Modus abhängig.

Die richtige Korrektur ist es daher, \zref@addprop{savepos}{pagevalue} hinzuzufügen.
_________________

Ulrike Fischer
www.troubleshooting-tex.de
Private Nachricht senden Benutzer-Profile anzeigen

Auch ein
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 15:44     Titel:
  Antworten mit Zitat      
Wenn Du es genau wissen willst, ist hier die Antwort von Heiko:

Heiko hat Folgendes geschrieben:
\ZREF@abspos@...` erwartet
ein Label vom Modul `thepage` mit `pagelayout`. Dort gibt es
die Property `pagevalue`. Im Code wird das jedoch auf
ein Label von `\zsavepos` angewendet, das lediglich die
x-, y-Position, sowie `abspage` enthält.

Der richtige Weg ist ein wenig komplizierter:

1. Aus dem `\zlabel` (`a:<Nummer>`) wird die absolute
Seitenzahl extrahiert.
2. Mit der absoluten Seitenzahl kommt man an das automatisch
generierte `thepage`-Label `thepage<absolute Seitenzahl>`,
das man dann den Makros `\ZREF@abspos@...` vorwerfen kann.

Weitere Bemerkungen:

* Die Frage, wann eine Seite ungerade ist, habe ich hier
mit `pagevalue` entschieden. Problematisch sind die
Fälle, bei denen gerade und ungerade Seiten bei der
absoluten und normalen Seitennummer verschieden sind,
etwa weil jemand eine Titelseite "0" eingefügt hat.
Dann trifft `pagevalue` eher die Benutzererwartungen.

* Macros mit Prefix `\ZREF@` leiten interne Makros ein,
die ohne Warnung bei Updates (zur Zeit leider nicht
wahrscheinlich) geändert werden können.
In diesem Fall, hatte ich was angefangen, aber
leider nicht zu Ende gebracht (zu Ende gedacht,
sauber getestet, dokumentiert.)
Meine Empfehlung wäre daher für den Benutzer,
von dem das Beispiel ursprünglich stammte,
das benötigte Makro unter anderem Namen zu
kopieren, um eine bessere Stabilität für
die ferne Zukunft zu haben.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 15:47     Titel:
  Antworten mit Zitat      
Danke für den Hinweis. Ich werde versuchen das zu ändern.
Kannst Du mir vielleicht noch auf die Sprünge helfen wie das mit dem Zähler/Labelfunktioniert?

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 16:34     Titel:
  Antworten mit Zitat      
Falls noch Jemand vor so einem Problem steht. Ich habe es jetzt so gelöst:

Code • Öffne in Overleaf
\documentclass{scrbook}
\usepackage{multicol}
\usepackage[savepos,pagelayout,abspage]{zref}
\usepackage{zref-abspos}

\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}
\renewcommand*\themynumber{\arabic{mynumber}}

\addtokomafont{minisec}{\small}% Schriftgröße für \minisec ändern

\newcommand{\Frage}[1]
{%
   %\addtocounter{mynumber}{1}%
   \refstepcounter{mynumber}\label{testmn}
   \minisec{Frage:\Randnotiz{\arabic{mynumber}}}
   \vskip-\parskip% Übler Hack, der sich auf Interna der Klasse stützt!
   #1\par
}

\usepackage{blindtext}

\begin{document}
   \section{Insgesamt sind es \textbf{\ref{testmn}} Fragen.}
   \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
      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}

Die Erklärung von Heiko ist mir leider zu hoch. Wie kann ich denn das Makro unter einen anderen Namen kopieren...?

u_fischer
Forum-Meister
Forum-Meister

Beiträge: 3536
Anmeldedatum: 22.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2017, 00:17     Titel:
  Antworten mit Zitat      
Auch ein hat Folgendes geschrieben:
Wenn Du es genau wissen willst, ist hier die Antwort von Heiko:


Das ist ja im Wesentlichen was ich auch sagte: man braucht die pagevalue-Property.

Ich habe mal bei github einen Eintrag in den Issuetracker gemacht. Evtl. kannst du da auch einen Kommentar einfügen. Dann kann die "Oberdiek Package Support Group" den Teil des Pakets evtl mal verbessern.

https://github.com/ho-tex/oberdiek/issues/24
_________________

Ulrike Fischer
www.troubleshooting-tex.de
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen Gehe zu Seite Zurück  1, 2



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