Seite 1 von 2

Raster über Bild legen, zum trimmen

Verfasst: Mi 6. Aug 2014, 22:53
von Crys
Die meisten Grafiken, die ich in LaTeX einfüge, sind A4 große PDF-Dateien, die ich direkt in LaTeX beschneide. Nur ist das immer eine schätz Arbeit, da die meisten Grafiken auch noch weiß Seitlich sind, sprich ich sehe nicht wo sie wirklich aufhören.

Wie kann ich auf eine Grafik ein Millimeter-Raster legen, damit ich die Grafik auf Anhieb richtig zuschneiden kann?

Verfasst: Do 7. Aug 2014, 08:25
von Johannes_B
Das geht mit allen Mitteln Linien zu erzeugen (picture, TikZ, PSTricks).
Vielleicht ist ja die Lösung in Wie kann ich mit TikZ auf Bildern zeichnen? hilfreich.
Wenn es aber bloß um den Wegschnitt weißen Randes geht, dann lohnt sich eventuell ein Blick auf pdfcrop.

Verfasst: Do 7. Aug 2014, 21:27
von Crys
Ich verwende schon lange TikZ ...

Ich möchte nicht jedes mal ein extrem umständliches Konstrukt machen müssen, damit ich mal "schnell" etwas zu schneiden kann ...
Gibt es da nicht ein Makro/Befehl dafür?


Und ein, pdfcrop suche ich in den Fall nicht. Ich erstelle oft Berichte wo ich aus Programmen eben Diagramme und Abbildungen in Latex einbinden muss. Einmal die Schnittmaße eingestellt und schon passt das eig. für immer ... mit pdfcrop müsste ich ja jedes mal die Datei bearbeiten.

Verfasst: Do 7. Aug 2014, 23:15
von Felix
Wo ist das Problem? Zieh Dir das Makro aus der verlinkten Seite, oder verwende onimage. Eintippen sollen wir es nicht für Dich, oder? ;-)

Felix

Verfasst: Do 28. Aug 2014, 12:51
von Crys
Nur mit copy'n'paste ist es leider nicht gemacht.

onimage ist gut und sehr kompakt (wenn man es mal installiert hat) und TikZ kann auch das Gitter darstellen.

Nur möchte ich nicht ein x-belibiges Gitter, sondern Einteilungen in mm, cm oder px.
Und ich weiß wirklich nicht wie ich das machen soll.
\documentclass[
	tikz,
	border=15pt,
	%convert={outext=.png,density=300,size=600},
	convert=false,
]{standalone}

\makeatletter
\newif\ifpgf@nodescope@grid
\tikzset{
  nodescope grid/.is if=pgf@nodescope@grid,
  every nodescope grid node/.style={
    shape=rectangle,
    font=\small\ttfamily,
    inner sep=+0pt,
    outer sep=+1pt,
    fill=white,
    overlay},
  every nodescope node/.style={
    shape=rectangle,
    inner sep=+0pt,
    outer sep=+0pt,
    draw=none,
    fill=none}}
\def\tikz@nodescope@env{%
  \pgfutil@ifnextchar[\tikz@@nodescope@env{\tikz@@@nodescope@env{}[]}}
\def\tikz@@nodescope@env[#1]{%
  \pgfutil@ifnextchar[{\tikz@@@nodescope@env{#1}}{\tikz@@@nodescope@env{#1}[]}}
\def\tikz@@@nodescope@env#1[#2]#3{%
  \pgfutil@ifnextchar[{\tikz@@@@nodescope@env{#1}{#2}{#3}}{\tikz@@@@nodescope@env{#1}{#2}{#3}[]}}
\def\tikz@@@@nodescope@env#1#2#3[#4]{%
  \tikz@scope@env[#4]
    \node[every nodescope node/.try, #1, alias=tikz@last@nodescope]{\includegraphics[#2]{#3}};%
    \pgftransformresetnontranslations
    \pgftransformshift{\pgfpointanchor{tikz@last@nodescope}{south west}}%
    \pgfsetxvec{\pgfpointdiff{\pgfpointanchor{tikz@last@nodescope}{south west}}{\pgfpointanchor{tikz@last@nodescope}{south east}}}%
    \pgfsetyvec{\pgfpointdiff{\pgfpointanchor{tikz@last@nodescope}{south west}}{\pgfpointanchor{tikz@last@nodescope}{north west}}}%
    \ifpgf@nodescope@grid
      \draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
      \foreach \x in {0,1,...,10}{
        \node[every nodescope grid node/.try, left, rotate=90] at (\x/10,0) {\ifnum\x=10\relax1.0\else0.\x\fi};
        \node[every nodescope grid node/.try, left] at (0,\x/10) {\ifnum\x=10\relax1.0\else0.\x\fi};
      }
    \fi
}
\tikzaddtikzonlycommandshortcutlet\tikz@orignodescope\nodescope
\tikzaddtikzonlycommandshortcutlet\tikz@origendnodescope\endnodescope
\tikzaddtikzonlycommandshortcutlet\tikz@origstartnodescope\startnodescope
\tikzaddtikzonlycommandshortcutlet\tikz@origstopnodescope\stopnodescope
\tikzaddtikzonlycommandshortcutlet\nodescope\tikz@nodescope@env
\tikzaddtikzonlycommandshortcutlet\endnodescope\endscope
\tikzaddtikzonlycommandshortcutlet\startnodescope\nodescope
\tikzaddtikzonlycommandshortcutlet\stopnodescope\endnodescope
\pgfutil@g@addto@macro\tikz@uninstallcommands{%
  \let\nodescope\tikz@orignodescope
  \let\endnodescope\tikz@origendnodescope
  \let\startnodescope\tikz@origstartnodescope
  \let\stopnodescope\tikz@origstopnodescope
}
\tikzdeclarecoordinatesystem{nodescope}{%
  \edef\pgf@temp{#1}%
  \expandafter\pgfutil@ifnextchar\expandafter x\expandafter\tikz@nodescope@split\expandafter\tikz@nodescope@split\pgf@temp\pgf@stop
}
\def\tikz@nodescope@split#1:#2\pgf@stop{%
  \begingroup
    \edef\pgf@temp{#1}%
    \pgftransformresetnontranslations
    \pgfsetxvec{\pgfpointdiff{\pgfpointanchor{#1}{south west}}{\pgfpointanchor{#1}{south east}}}%
    \pgfsetyvec{\pgfpointdiff{\pgfpointanchor{#1}{south west}}{\pgfpointanchor{#1}{north west}}}%
    \tikz@scan@one@point\tikz@nodescope@shift(#2)\relax
  \endgroup
}
\def\tikz@nodescope@shift#1{%
  \pgf@process{\pgfpointadd{#1}{\pgfpointanchor{\pgf@temp}{south west}}}%
}
\makeatother

\begin{document}
	\begin{tikzpicture}
		\begin{nodescope}[draw][width=.9\textwidth]{test_bild}[nodescope grid]
		\end{nodescope}
	\end{tikzpicture}
\end{document}

Verfasst: Di 2. Sep 2014, 16:19
von Crys
Keiner ne Idee?
Das Beispiel ist aus dem vom Johannes_B verlinkten Beispiel.

Verfasst: Di 2. Sep 2014, 17:26
von esdd
Vielleicht verstehe ich Dich ja falsch, aber mit TikZ kannst Du doch einfach ein grid mit der Schrittweite Deiner Wahl darüber legen?
\documentclass[tikz,margin=1cm]{standalone}
\usepackage{mwe}%für das Beispielbild
\begin{document}
\begin{tikzpicture}[gitter/.style={#1}]
  \node[
      anchor=south west,
      inner sep=0pt,outer sep=0pt
    ](p){\includegraphics{example-image}};
  \foreach \g in {%
      {step=1mm,very thin,red!40}%
      ,{step=5mm,thin},{step=1cm,thick}%
      ,{step=5cm,very thick,red!50!black}%
    }\draw[red,gitter/.expanded=\g](0,0)grid(p.north east);
\end{tikzpicture}
\end{document} 
Gruß
Elke

Verfasst: Mi 3. Sep 2014, 11:08
von Crys
Danke, ich habe mich glaub ich von den nicht dokumentieren und extream komplizierten Beispiel blenden lassen, ich habe das mal neu aufgesetzt:
\documentclass[tikz,margin=1cm]{standalone}
\usepackage{mwe}
\begin{document}

\begin{tikzpicture}[gitter/.style={#1}]

	\node[anchor=north west](p){\includegraphics{example-image}}; 

	\foreach \x in {step=1cm}
		\draw[white,gitter/.expanded=\x](0,0) grid (p.south east);

	\foreach \x in {step=1cm}
		\draw (0,0) (p.north east) node[above]{$\x$};
		
	%\foreach \x in {1,...,10}
		%\draw (\x,0) (\x,0) node[above]{$\x$};
		
	\foreach \y in {-1,...,-10}
		\draw (0,\y) (0,\y) node[left] {$\y$}; 

\end{tikzpicture}

\end{document}
Nur wie bekomme ich die Zahlen an den Achsen hin?
Nach unten soll nicht negativ sein und in beiden Achsen soll die beschriftung bis zur letzten ganzen Zahl gehen. Wie geht das?

Dann würde ich das in ein Makro packen und dann in den ich die Schritte, Linienfarbe und die Datei als Variable setzte.

Verfasst: Mi 3. Sep 2014, 11:42
von esdd
Warum lässt du beim Einfügen des Bildes die Nodeoptionen
inner sep=0pt,outer sep=0pt
weg? Soll der Nullpunkt des Gitters nicht in der linken oberen Ecke des Bildes liegen sondern außerhalb? Ändere mal in Deinem Code die Farbe des Gitters von white zu red, dann kannst Du das Problem sehen.
\documentclass[tikz]{standalone} 
\usepackage{mwe} 
\begin{document} 
\begin{tikzpicture}[gitter/.style={#1}]
    \node[anchor=north west,
        inner sep=0pt,outer sep=0pt% notwendig!!
      ](p){\includegraphics{example-image}};
    \clip([xshift=-1.5em,yshift=1.5em]p.north west)rectangle(p.south east);
    \foreach \x in {step=1cm} 
       \draw[red,gitter/.expanded=\x,line width=2pt,opacity=0.5](0,0) grid (p.south east); 
    \foreach \x in {1,...,30}\node[above] at (\x,0){\x}; 
    \foreach \y in {1,...,30}\node[left] at (0,-\y){\y}; 
\end{tikzpicture} 
\end{document}
oder
\documentclass[tikz]{standalone} 
\usepackage{mwe} 
\begin{document} 
\begin{tikzpicture}
    \node[anchor=north west,
        inner sep=0pt,outer sep=0pt% notwendig!!
      ](p){\includegraphics{example-image}};
    \clip([xshift=-1.5em,yshift=1.5em]p.north west)rectangle(p.south east);
    \draw[white,step=1cm](0,0) grid (p.south east); 
    \foreach \x in {1,...,30}\node[above] at (\x,0){\x}; 
    \foreach \y in {1,...,30}\node[left] at (0,-\y){\y}; 
\end{tikzpicture} 
\end{document}
Gruß
Elke

Verfasst: Mi 3. Sep 2014, 13:27
von Crys
Danke Elke,

ich hab das wohl viel zu kompliziert angegangen.
Die 'sep=0pt' habe ich einfach beim vereinachen gelöscht, habe da beim weißen Gitter keine Änderung gesehen ;)
\documentclass{scrartcl}
\usepackage{tikz}
\usepackage{mwe}

\newcommand{\gridgraphics}[3][]{%
	\begin{tikzpicture}
		\node[anchor=north west,inner sep=0pt,outer sep=0pt](p){\includegraphics[#1]{#2}}; 
		\clip([xshift=-1.5em,yshift=1.5em]p.north west)rectangle(p.south east); 
		\draw[#3](0,0) grid (p.south east); 
		\foreach \x in {1,...,15}\node[above] at (\x,0){\x}; 
		\foreach \y in {1,...,15}\node[left] at (0,-\y){\y}; 
	\end{tikzpicture}
}

\begin{document}

\gridgraphics[trim=0cm 0cm 0cm 0cm, clip, scale=1]{example-image}{white,step=5mm}\\[5mm]

\includegraphics[trim=0cm 0cm 0cm 0cm, clip, scale=1]{example-image}

\end{document}
So funktioniert es quasi, ein paar Fragen sind aber immer noch offen:
- Jetzt wird nur bis 15cm die Beschriftung angezeigt. Ich kann das auch auf 99 ergänzen, aber gibt es keine Möglichkeit, dass immer soweit laufen zu lassen, bis auch das Gitter endet?
- die Beschriftung erfolgt jetzt immer in 1cm Schritten, wie lässt sich das auf z.B. 5mm Schritte (analog zum Gitter) ändern?