Raster über Bild legen, zum trimmen

Tabellen und Grafiken erstellen und anordnen


Crys
Forum-Century
Forum-Century
Beiträge: 202
Registriert: So 16. Okt 2011, 20:34
Wohnort: localhost:1337

Raster über Bild legen, zum trimmen

Beitrag 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?

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag 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.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Crys
Forum-Century
Forum-Century
Beiträge: 202
Registriert: So 16. Okt 2011, 20:34
Wohnort: localhost:1337

Beitrag 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.

Felix
Forum-Century
Forum-Century
Beiträge: 210
Registriert: Sa 25. Jan 2014, 13:57

Beitrag 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
Ein TikZ Süchtiger :-)

Crys
Forum-Century
Forum-Century
Beiträge: 202
Registriert: So 16. Okt 2011, 20:34
Wohnort: localhost:1337

Beitrag 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}

Crys
Forum-Century
Forum-Century
Beiträge: 202
Registriert: So 16. Okt 2011, 20:34
Wohnort: localhost:1337

Beitrag von Crys »

Keiner ne Idee?
Das Beispiel ist aus dem vom Johannes_B verlinkten Beispiel.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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

Crys
Forum-Century
Forum-Century
Beiträge: 202
Registriert: So 16. Okt 2011, 20:34
Wohnort: localhost:1337

Beitrag 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.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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

Crys
Forum-Century
Forum-Century
Beiträge: 202
Registriert: So 16. Okt 2011, 20:34
Wohnort: localhost:1337

Beitrag 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?

Antworten