In folgendem Minimalbeispiel verwende ich das Paket gridset, um im zweispaltigen Satz die Textzeilen in einem gleichmäßigen Grundlinien-Raster zu erhalten. Nach einer Gleichung springe ich mittels \vskipnextgrid auf die nächste Zeile im Raster:

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{gridset}
\begin{document}
\twocolumn
\blindtext[3]
\[
y = x^2
\]
\vskipnextgrid
Nun kommt weiterer Text.
\end{document}

Man muss wenigstens zweimal übersetzen, da \vskipnextgrid die Position in die .aux-Datei schreibt, aus der sie im nächsten Lauf eingelesen wird. Die Zeilenhöhe scheint dann zu passen, doch das erste Wort wird in den Rand geschrieben.

Ausgabe

Warum passiert das, und wie macht man das richtig?

gefragt 07 Okt '14, 20:20

stefan's gravatar image

stefan ♦♦
16.7k72845
Akzeptiert-Rate: 51%

geschlossen 18 Nov, 09:22

saputello's gravatar image

saputello
10.8k104064

Mit \par\skipnextgrid\noindent oder \vskip0pt\skipnextgrid\noindent funktioniert es.

(07 Okt '14, 21:55) esdd

@esdd Vielen Dank, das funktioniert. Ich hatte sowas getestet und dabei eine Leerzeile mehr erhalten. Komischerweise hatte es vorher sich bei fast gleichem Code mal richtig verhalten. Ich wollte das Paket gern im Buch vorstellen, diesen Fix kann ich jedoch nur schwer erklären.

(07 Okt '14, 23:40) stefan ♦♦

Da es ohne \twocolumn funktioniert, liegt vielleicht da der Hund begraben?

(08 Okt '14, 01:29) cgnieder

@stefan: Das Paket ist vom Autor als experimentelle alpha-Version ohne Support eingestuft. Bei verschiedenen Gelegenheiten hat er auch auf Mängel hingewiesen. Beispielsweise funktioniert es im zweispaltigen Modus schlecht und mit multicols eher gar nicht. Ob es unter diesen Vorzeichen sinnvoll ist, es in einem Buch vorzustellen?

(08 Okt '14, 07:53) Ijon Tichy

@Clemens Zweispaltig macht Raster besonders interessant. @Ijon alpha hätte ich erwähnt, es war auch eher als Zusatzbemerkung gedacht, dass man damit z.B. einfach dort reparieren könnte, wo das Paket grid nicht funktioniert, wie bei align beispielsweise.

(08 Okt '14, 08:47) stefan ♦♦

Die Frage wurde aus folgenden Grund "Das Problem ist veraltet, da es seit Version 0.3 nicht mehr auftritt." geschlossen saputello 18 Nov, 09:22


\vskipnextgrid funktioniert eigentlich nur im vertikalen Modus. Hier befindest du dich aber nicht im vertikalen Modus. gidset muss deshalb in den vertikalen Modus wechseln, den vertikalen Abstand erzeugen und dann wieder zurück in den horizontalen Modus. Dabei geht normalerweise die horizontale Position verloren. Um die wieder zu erreichen, wird über die aux-Datei auch diese vor dem Wechsel in den vertikalen Modus gespeichert und dann per \hskip angesteuert. Es wird aber nicht berücksichtigt, dass du dich hier in der zweiten Spalte befindest. Dadurch wird um den Wert der Breite der ersten Spalte plus dem Abstand zwischen den Spalten zu weit nach rechts gesprungen.

Ab Version 0.3 ist das Problem laut commit-Message wohl behoben.

Durch eine Änderung in \vskipgridset kann man das auch für frühere Versionen korrigieren:

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{gridset}
\makeatletter
\@ifpackagelater{gidset}{2020/02/10}{}{% Nur für ältere Versionen ändern.
\renewcommand*{\vskipnextgrid}{%
  \begingroup
    \stepcounter{gridcnt}\edef\@tempa{vp!\thegridcnt}%
    \ifvmode
      \leavevmode\savepos{\@tempa}%
      \expandafter\ifx\csname pos@\@tempa @vskip\endcsname\relax
      \else
        \expandafter\ifnum \csname pos@\@tempa @vskip\endcsname =\z@\else
          \PackageInfo{gridset}{%
            vmode \string\vskip\csname pos@\@tempa @vskip\endcsname sp%
          }%
          \vskip -\parskip\vskip -\baselineskip
          \expandafter\vskip\csname pos@\@tempa @vskip\endcsname sp\relax
        \fi
      \fi
    \else
      \parskip=\z@
      \savepos{vp!\thegridcnt}%
      \expandafter\ifx\csname pos@\@tempa @vskip\endcsname\relax
      \else
        \expandafter\ifnum \csname pos@\@tempa @vskip\endcsname =\z@\else
         \PackageInfo{gridset}{%
            hmode \string\vskip\csname pos@\@tempa @vskip\endcsname sp%
          }%
          \vskip -\baselineskip
          \expandafter\vskip\csname pos@\@tempa @vskip\endcsname sp\relax
          % Ab hier haben wir nun die Änderung, dass nicht mehr direkt
          % \leavevmode\hskip … aufgerufen wird, sondern der Wert für den
          % \hskip wird erst einmal in \@tempdima gespeichert …
          \if@twoside
            \expandafter\ifodd\csname pos@\@tempa @page\endcsname\relax
              \@tempdima\dimexpr - 1in - \oddsidemargin - \parindent
                              + \csname pos@\@tempa @x\endcsname sp\relax
            \else
              \@tempdima\dimexpr - 1in - \evensidemargin - \parindent
                              + \csname pos@\@tempa @x\endcsname sp\relax
            \fi
          \else
            \@tempdima\dimexpr - 1in - \oddsidemargin - \parindent 
            + \csname pos@\@tempa @x\endcsname sp\relax
          \fi
          % … und in der zweiten Spalten eines zweispaltigen Textes wird er
          % dann um die Spaltenbreite + den Spaltenabstand korrigiert …  
          \if@twocolumn\if@firstcolumn\else
            \addtolength{\@tempdima}{-\columnwidth}\addtolength{\@tempdima}{-\columnsep}%
          \fi\fi
          % … und erst dann erfolgt wieder das \leavevmode\hskip …
          \leavevmode\hskip\@tempdima
        \fi
      \fi
    \fi
  \endgroup
}
}
\makeatother
\begin{document}
\twocolumn
\blindtext[3]
\[
y = x^2
\]
\vskipnextgrid
Nun kommt weiterer Text.
\end{document}

Ergebnis mit korrekter horizontaler Position

Das nützt zwar nichts für dein Buch, aber ist vielleicht trotzdem für den einen oder anderen nützlich. Allerdings sollte man die Änderung natürlich nur vornehmen, wenn man sicher ist, dass der Code in gridset unverändert ist.

Permanenter link

beantwortet 11 Feb, 18:18

Ijon%20Tichy's gravatar image

Ijon Tichy
9.7k31228
Akzeptiert-Rate: 52%

bearbeitet 12 Feb, 13:16

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:

×5
×3
×1
×1

gestellte Frage: 07 Okt '14, 20:20

Frage wurde gesehen: 2,794 Mal

zuletzt geändert: 18 Nov, 09:22