Frage

Frage

Frage

Wie kann ich meine Rasterlinien perfekt ausrichten, sodass sie den physischen Millimetern auf der Seite entsprechen?

Situation

Ich habe ein Blatt A4-Papier. Ich möchte darauf Gitternetzlinien zeichnen und jeden Millimeter beschriften (die Zahlengröße ist natürlich für die digitale Verwendung gedacht, realistischerweise würden die Zentimeter für den physischen Ausdruck beschriftet).

Kriterien

  • Funktioniert mit jeder Papiergröße (sofern das \stepMaximum angepasst ist)
  • Linien richten sich nach den physikalischen Abmessungen
  • Die Überlagerung deckt alle anderen Tikz-Bilder (oder alles andere) ab, unabhängig davon, wo der Befehl im Dokument aufgerufen wird (ich kann den Befehl auf jeder Seite aufrufen, auf der ich das Raster haben möchte).

Bildbeschreibung hier eingeben

Problem

  • Die Linien beginnen nicht am Ursprung
  • Das Raster wird tikzpictureinnerhalb des Dokuments nicht über dem Aufruf angezeigt, unabhängig davon, wo \showgrides aufgerufen wird.

Beispielcode

\documentclass{article}
\usepackage{fontspec}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{anyfontsize}
\newcommand{\showgrid}{%
    \begin{tikzpicture}[overlay,remember picture,every node/.style={inner sep=0pt,outer sep=0pt}]%
        \draw[help lines,xstep=1mm,ystep=1mm,gray!25] (current page.north west) grid (current page.south east);
        \draw[help lines,xstep=10mm,ystep=10mm,color=gray] (current page.south west) grid (current page.north east);
        \foreach \step in {0,1,...,297} {
            \node [anchor=north] at ($ (current page.north west) + (\step mm,0cm) $) {\fontsize{1}{2}\selectfont \step};
            \node [anchor=west] at ($ (current page.north west) + (0cm,-\step mm) $) {\fontsize{1}{2}\selectfont \step};
        }
    \end{tikzpicture}
}%



\begin{document}
\thispagestyle{empty}
\showgrid{}

\begin{tikzpicture}[overlay,remember picture,every node/.style={fill=red,inner sep=0pt,outer sep=0pt}]%
   \node [minimum width=2cm,minimum height=2cm] at (current page.center) {};
\end{tikzpicture}%

\end{document}

Ausgabe

Bildbeschreibung hier eingeben


UPDATE: Meine Lösung

Dies ist eine Hybridlösung, die den Ansatz von CFR mit der automatischen Seitengrößenerkennung der Antwort von ESDD kombiniert.

\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage{tikzpagenodes}
\usetikzlibrary{calc}
\usetikzlibrary{backgrounds}
\usepackage{anyfontsize}
\usepackage{atbegshi}
\newcommand{\showgrid}{%
  \AtBeginShipoutNext{\AtBeginShipoutAddToBoxForeground{%
      \begin{tikzpicture}
        [
          overlay,
          remember picture,
          inner sep=0pt,
          outer sep=0pt,
          minor line/.style={help lines, draw=black!50, on background layer},
          major line/.style={help lines, draw=black},
          major number/.style={font=\fontsize{3}{5}\selectfont\bfseries},
          minor number/.style={font=\fontsize{1}{2}\selectfont},
        ]
        \pgfmathtruncatemacro\xmaxstep{\paperwidth/1mm}% calculate needed steps in x direction
        \pgfmathtruncatemacro\ymaxstep{\paperheight/1mm}% calculate needed steps in y direction
        \foreach \step in {0,1,...,\xmaxstep} {
          \pgfmathsetmacro\gridlineconfig{ifthenelse(equal(int(mod(\step,10)),0),"major line","minor line")}%
          \draw [\gridlineconfig] ($(current page.north west) + (\step mm,0)$) -- ($(current page.south west) + (\step mm,0)$);
        }
        \foreach \step in {0,1,...,\ymaxstep} {
          \pgfmathsetmacro\gridlineconfig{ifthenelse(equal(int(mod(\step,10)),0),"major line","minor line")}%
          \pgfmathsetmacro\numberconfig{ifthenelse(equal(int(mod(\step,10)),0),"major number","minor number")}%
          \draw [\gridlineconfig] ($(current page.north west) - (0,\step mm)$) -- ($(current page.north east) - (0,\step mm)$);
          \node [anchor=north,\numberconfig] at ($ (current page.north west) + (\step mm,0) $) {\step};
          \node [anchor=west,\numberconfig] at ($ (current page.north west) - (0,\step mm) $) {\step};
        }
      \end{tikzpicture}
    }%
  }%
}
\tikzset{% 
    myseg/.style={%
        red,very thick
    }
}


\begin{document}
\null
\showgrid

\begin{tikzpicture}[overlay,remember picture]
\draw [myseg] (current page text area.north west) -- (current page text area.north east) -- (current page text area.south east) -- (current page text area.south west) -- (current page text area.north west);
\draw [myseg] (current page header area.north west) -- (current page header area.north east) -- (current page header area.south east) -- (current page header area.south west) -- (current page header area.north west);
\draw [myseg] (current page footer area.north west) -- (current page footer area.north east) -- (current page footer area.south east) -- (current page footer area.south west) -- (current page footer area.north west);
\draw [myseg] (current page marginpar area.north west) -- (current page marginpar area.north east) -- (current page marginpar area.south east) -- (current page marginpar area.south west) -- (current page marginpar area.north west);
\end{tikzpicture}

\end{document}

Ausgabe

Notiz:Beim Reverse Engineering von Layouts kann dieses Raster über eine andere PDF-Datei gedruckt werden, indem man die Option „Auf Druckerränder skalieren“ in den meisten Druckmenüs verwendet, da sowohl die PDF-Datei als auch das Raster im gleichen Verhältnis skaliert werden, was bedeutet, dass ein verkleinerter Millimeter einem Millimeter auf der darunterliegenden PDF-Datei entspricht. Ein Beispiel für das Zeichnen auf Bildern mit diesem Code finden Sie hier:https://tex.stackexchange.com/a/269156/13552 Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Antwort1

Beachten Sie, dass die Linienbreiten in den geposteten PNGs möglicherweise nicht gleichmäßig aussehen. Dies ist ein Artefakt einer Kombination aus kleinem Bildschirm und PDF-Viewer und hat nichts mit dem eigentlichen PDF zu tun. Es betrifft nur meine PNG-Ausschnitte.

Ich denke, diese Lösung erfüllt die verschiedenen Desiderate:

  • Kann durch Anpassen der \steps-Definitionen an andere Papierformate angepasst werden.
  • Die nordwestliche Ecke des Papiers befindet sich am Ursprung und die Gitternetzlinien richten sich nach den physischen Abmessungen der Seite, in dem Sinne, dass die nordwestlichen Ecken sowohl eines kleinen als auch eines großen Quadrats des Gitternetzes an der nordwestlichen Ecke der Seite ausgerichtet sind. Seite mit Raster Nordwestlicher Ursprung
  • Das Raster überlagert andere Seiteninhalte, auch tikzpicturesolche, die overlay, remember picturesich selbst verwenden. Raster überlagert Bild
  • \showgridkann überall auf der Seite angegeben werden, wo das Raster erforderlich ist, einschließlich vor allen tikzpictures, auch wenn diese selbst verwenden overlay, remember picture.
  • Das Raster wird nur auf den Seiten angezeigt, auf denen es angefordert wird. Für die folgende Seite wird kein Raster verwendet. (Es wäre jedoch leicht, dies so anzupassen, dass es auf jeder Seite oder so angezeigt wird. Siehe die Dokumentation von atbegshi.)

Ich habe das Raster von Hand gezeichnet und dabei die horizontalen und vertikalen Linien getrennt gezeichnet. Ich verwende die backgroundsBibliothek, um sicherzustellen, dass die helleren Linien nicht über die dunkleren Linien gezeichnet werden (was ziemlich seltsam aussieht).

Ich verwende es atbegshi, um sicherzustellen, dass das Raster über sämtlichen Seiteninhalten platziert wird.

\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{backgrounds}
\usepackage{anyfontsize}
\newcommand{\showgrid}{%
  \AtBeginShipoutNext{\AtBeginShipoutAddToBoxForeground{%
      \begin{tikzpicture}
        [
          overlay,
          remember picture,
          inner sep=0pt,
          outer sep=0pt,
          minor line/.style={help lines, draw=gray!25, on background layer},
          major line/.style={help lines, draw=gray},
        ]
        \foreach \step in {0,...,210} {
          \pgfmathsetmacro\gridlineconfig{ifthenelse(equal(int(mod(\step,10)),0),"major line","minor line")}%
          \draw [\gridlineconfig] ($(current page.north west) + (\step mm,0)$) -- ($(current page.south west) + (\step mm,0)$);
        }
        \foreach \step in {0,...,297} {
          \pgfmathsetmacro\gridlineconfig{ifthenelse(equal(int(mod(\step,10)),0),"major line","minor line")}%
          \draw [\gridlineconfig] ($(current page.north west) - (0,\step mm)$) -- ($(current page.north east) - (0,\step mm)$);
          \node [anchor=north] at ($ (current page.north west) + (\step mm,0) $) {\fontsize{1}{2}\selectfont \step};
          \node [anchor=west] at ($ (current page.north west) - (0,\step mm) $) {\fontsize{1}{2}\selectfont \step};
        }
      \end{tikzpicture}
    }%
  }%
}
\usepackage{atbegshi}

\begin{document}
  \thispagestyle{empty}
  \showgrid
  \begin{tikzpicture}[overlay,remember picture,every node/.style={fill=red,inner sep=0pt,outer sep=0pt}]%
    \node [minimum width=2cm,minimum height=2cm] at (current page.center) {};
  \end{tikzpicture}
\end{document}

Antwort2

\AddToShipoutPictureFG*Der im Paket definierte Befehl eso-piclegt seinen Inhalt oben auf der aktuellen Seite ab. Zusätzlich ist es möglich, die benötigte Anzahl an Etiketten in x- und y-Richtung abhängig von der Papiergröße zu berechnen.

\documentclass[a5paper]{article}
%\usepackage{fontspec} % commented to speed up compilation
\usepackage{blindtext}% dummy text
\usepackage{tikz}
\usepackage{anyfontsize}
\usepackage{eso-pic}

\newcommand{\showgrid}{%
  \AddToShipoutPictureFG*{%
    \begin{tikzpicture}[overlay,remember picture,
        thin,nodes={font=\fontsize{1}{2}\selectfont},
        yshift=\paperheight% origin is in the upper left corner
        ]
      \draw[gray!25,step=1mm](current page.south west)grid(current page.north east);
      \draw[blue!30!gray,step=10mm](current page.south west) grid(current page.north east);
      \pgfmathtruncatemacro\xmaxstep{\paperwidth/1mm}% calculate needed steps in x direction
      \pgfmathtruncatemacro\ymaxstep{\paperheight/1mm}% calculate needed steps in y direction
      \foreach \step in {0,1,...,\xmaxstep}
        \node [anchor=north] at ([xshift=\step mm]current page.north west) {\step};
      \foreach \step in {0,1,...,\ymaxstep}
        \node [anchor=west] at ([yshift=-\step mm]current page.north west) {\step};
%        \node[fill=red]at(0,0){};% to show the origin
    \end{tikzpicture}%
  }%
}

\begin{document}
\blindtext[2]
\showgrid
\tikz[overlay,remember picture]\node[minimum size=2cm,fill=red] at (current page.center) {};
\blinddocument
\showgrid
\blinddocument
\end{document}

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben


Mit dem Paket scrlayerkönnen Sie das Raster als neuen Seitenstil definieren.

\documentclass[a5paper]{article}
%\usepackage{fontspec} % commented to speed up compilation
\usepackage{blindtext}% dummy text
\usepackage{tikz}
\usepackage{anyfontsize}

\usepackage{scrlayer}
\DeclareNewLayer[foreground,page,
  contents={%
  \begin{tikzpicture}[thin,nodes={font=\fontsize{1}{2}\selectfont}]
    \useasboundingbox(0,0)rectangle(\layerwidth,-\layerheight);
    \draw[gray!25,step=1mm](0,0)grid(\layerwidth,-\layerheight);
    \draw[orange!30!gray,step=10mm](0,0)grid(\layerwidth,-\layerheight);
    \pgfmathtruncatemacro\xmaxstep{\layerwidth/1mm}% calculate needed steps in x direction
    \pgfmathtruncatemacro\ymaxstep{\layerheight/1mm}% calculate needed steps in y direction
    \foreach \step in {0,1,...,\xmaxstep}
      \node [anchor=north] at (\step mm,0) {\step};
    \foreach \step in {0,1,...,\ymaxstep}
      \node [anchor=west] at (0,-\step mm){\step};
  \end{tikzpicture}%
  }
]{grid.fg}
\DeclareNewPageStyleByLayers{grid}{grid.fg}

\pagestyle{headings}

\begin{document}
\blindtext[2]
\thispagestyle{grid}
\tikz[overlay,remember picture]\node[minimum size=2cm,fill=red] at (current page.center) {};
\blinddocument
\thispagestyle{grid}
\blinddocument
\end{document}

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Antwort3

Teillösung

Der folgende Code weist einige kleinere Probleme auf.

  1. der Ursprung des Rasters befindet sich in der unteren linken Ecke der Seite (der OP möchte die obere linke Ecke)

  2. Die Verwendung von \AddToShipoutPicturemacht den Ursprung zu 1., erstellt aber auch das Raster unter dem Seiteninhalt. Wenn es entfernt wird, geht das Raster darunter, aber der Ursprung wird verrückt.

Mit\AddToShipoutPicture

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Ohne\AddToShipoutPicture

Bildbeschreibung hier eingeben

MW(?)E

\documentclass[a5paper]{article} % a5 just to example
%\usepackage{fontspec} % commented to speed up compilation
\usepackage{tikz}
\usetikzlibrary{shapes.misc}
\usetikzlibrary{calc}
\usepackage{anyfontsize}
\usepackage{eso-pic}

  \newcommand{\showgrid}{%
%    \AddToShipoutPicture{%
      \begin{tikzpicture}[overlay,remember picture]
        \draw[blue!30!white]
          (current page.south west) grid[step=1mm]
          (current page.north east);
        \draw[blue!80!white]
          (current page.south west) grid[step=10mm]
          (current page.north east);
        \foreach \step in {0,1,...,297} {
                      \node [anchor=north] at ($ (current page.north west) + (\step mm,0cm) $) {\fontsize{1}{2}\selectfont \step};
                      \node [anchor=west] at ($ (current page.north west) + (0cm,-\step mm) $) {\fontsize{1}{2}\selectfont \step};
                  }
      \end{tikzpicture}
%    }%
  }


\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}[overlay,remember picture,every node/.style={fill=red,inner sep=0pt,outer sep=0pt}]%
   \node [minimum width=2cm,minimum height=2cm] at (current page.center) {};
\end{tikzpicture}%
\showgrid
\end{document}

Antwort4

Hier eine Lösung, die das Afterpage-Paket verwendet und den Befehl \@outputpage neu definiert. Vielleicht kann jemand diesen Befehl mit etoolbox patchen. Die aktuelle Seite wird nicht verwendet.

\documentclass{article}
\usepackage{tikz}
\usepackage{afterpage}
\usetikzlibrary{calc}
\usepackage{anyfontsize}
\makeatletter
\newcommand{\showgrid}{%
\let\grid@outputpage\@outputpage
\def\@outputpage{%
\begingroup           % the \endgroup is put in by \aftergroup
  \let \protect \noexpand
  \@resetactivechars
  \global\let\@@if@newlist\if@newlist
  \global\@newlistfalse
  \@parboxrestore
  \shipout \vbox{%
    \set@typeset@protect
    \aftergroup \endgroup
    \aftergroup \set@typeset@protect
                                % correct? or just restore by ending
                                % the group?
  \if@specialpage
    \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
  \fi
  \if@twoside
    \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
         \let\@themargin\oddsidemargin
    \else \let\@thehead\@evenhead
       \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
    \fi
  \fi
  \reset@font
  \normalsize
  \normalsfcodes
  \let\label\@gobble
  \let\index\@gobble
  \let\glossary\@gobble
  \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
    \@begindvi
    \vskip \topmargin
    \moveright\@themargin \vbox {%
      \setbox\@tempboxa \vbox to\headheight{%
        \vfil
        \color@hbox
          \normalcolor
          \hb@xt@\textwidth{\@thehead}%
        \color@endbox
        }%                        %% 22 Feb 87
      \dp\@tempboxa \z@
      \box\@tempboxa
      \vskip \headsep
      \box\@outputbox
      \baselineskip \footskip
      \color@hbox
        \normalcolor
        \hb@xt@\textwidth{\@thefoot}%
      \color@endbox
      }%
\vskip-\dimexpr\textheight+\topmargin+\headheight+\headsep+\footskip+1in\relax%
\hspace*{-1in}%
\begin{tikzpicture}[every node/.style={inner sep=0pt,outer sep=0pt}]%
   \draw[help lines,gray!25] (0,0) grid[step=1mm] (\paperwidth,-\paperheight);
   \draw[help lines,gray] (0,0) grid[step=10mm] (\paperwidth,-\paperheight);
   \foreach \step in {0,1,...,297} {
        \node [anchor=north] at ($ (0,0) + (\step mm,0cm) $) {\fontsize{1}{2}\selectfont \step};
        \node [anchor=west] at ($ (0,0) + (0cm,-\step mm) $) {\fontsize{1}{2}\selectfont \step};
    }
    \end{tikzpicture}
    }%
  \global\let\if@newlist\@@if@newlist
  \global \@colht \textheight
  \stepcounter{page}%
  \let\firstmark\botmark
}\afterpage{\global\let\@outputpage\grid@outputpage}}
\makeatother



\begin{document}
\thispagestyle{empty}
test 

\showgrid

and test

\begin{tikzpicture}[overlay,remember picture,every node/.style={fill=red,inner sep=0pt,outer sep=0pt}]%
   \node [minimum width=2cm,minimum height=2cm] at (current page.center) {};
\end{tikzpicture}%

\newpage

test

\newpage

test 

\showgrid

and test

\end{document}

verwandte Informationen