TikZ-Bild und Trennlinie der Kopfzeile kombinieren

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: TikZ-Bild und Trennlinie der Kopfzeile kombinieren

von Nina » Do 18. Aug 2016, 10:25

Ein herzliches Dankeschön für die ganzen Verbesserungen!

von esdd » Mi 17. Aug 2016, 20:42

Hier ist noch ein Beispiel bei dem beide Linien in Boxen gespeichert werden und dann, wie auch schon von Gast vorgeschlagen, über neue Layer zum Seitenstil hinzugefügt werden.
\documentclass[ 
    paper=a5, 
    twoside=true, 
    headinclude=true, 
    footinclude=true, 
    BCOR=10mm, 
    fontsize=10pt, 
    headings=small, 
    DIV=calc,
]{scrreprt} 
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 

\usepackage{tikz}
\tikzset{
  ekg/.style={insert path={
    (0,455.0021)
    -- (11.8345,455.0021)
    .. controls (14.2834,454.8958) and (14.1385,448.7114) .. (18.8842,448.7114)
    .. controls (24.2116,448.7114) and (23.9695,454.8958) .. (26.3035,455.0021)
    -- (40.7723,455.0021)
    -- (42.7455,463.0645)
    -- (46.0339,413.3461) 
    -- (48.6647,466.4235)
    -- (51.2955,455.0021)
    -- (61.1605,455.0021)
    .. controls (64.4487,454.3298) and (65.7118,441.6860) .. (70.3679,441.5241)
    .. controls (75.2428,441.3542) and (76.9447,454.3301) .. (80.2329,455.0021)
    -- (90.2329,455.0021)
  }}
}

\newsavebox\lekg
\newsavebox\rekg

\AtBeginDocument{
  \pgfmathsetmacro\ekgrulewidth{\textwidth/.5pt}
  \begin{lrbox}{\lekg}
    \begin{tikzpicture}[line join=round, x=.5pt, y=-.5pt]
       \draw [ekg]--(\ekgrulewidth,455.0021); 
    \end{tikzpicture}
  \end{lrbox}
  \begin{lrbox}{\rekg}
    \begin{tikzpicture}[line join=round, x=-.5pt, y=-.5pt]
       \draw [ekg]--(\ekgrulewidth,455.0021); 
    \end{tikzpicture}
  \end{lrbox}
}

\usepackage[automark]{scrlayer-scrpage} 
\DeclareNewLayer[
  clone=scrheadings.head.even,
  align=t,
  contents=\smash{\usebox\rekg}
]{even.myheadsepline}
\DeclareNewLayer[
  clone=scrheadings.head.odd,
  align=t,
  contents=\smash{\usebox\lekg}
]{odd.myheadsepline}
\AddLayersToPageStyle{scrheadings}{odd.myheadsepline,even.myheadsepline}

\usepackage{blindtext}% dummy text
\begin{document} 
\blinddocument 
\end{document}

von Gast » Mi 17. Aug 2016, 20:03

Ich würde nicht auf jeder Seite eine externe Datei laden. Das kostet unnötig Zeit. Außerdem würde ich mir überlegen, die Linie entweder über den Layer für die Kopflinie in scrlayer-scrpage zu realisieren oder einfach einen neuen Layer dafür definieren und dem Seitenstil hinzufügen.

von iTob » Mi 17. Aug 2016, 17:43

@Nina: Das dachte ich mir, dass das deine ersten Gehversuche sind :-) wenn du die in TikZ einarbeiten willst, kann ich dir die tutorials am Anfang der Anleitung (pgfmanual.pdf) sehr empfehlen, und für einen kurzen Überblick lade ich dich gerne ein, mal einen Blick in meinen Blog zu werfen: TikZ-Adventskalender

@Bartman: Ein {tikzpicture} in einem {tikzpicture} und darin ein pic sind jetzt aber auch nicht grad elegant ;-)

So würde ich das im Wesentlichen implementieren: Mit dem Paket tikzpagenodes kann man u.a. auf die Koordinaten der Kopfzeile zugreifen, dann kann man das TikZ-Bild so verschieben, das der Ursprung (0,0) auf eine Ecke der Kopfzeile fällt und man spart sich mühsames prickeln, bis man den richtigen Punkt trifft. Bei der Gelegenheit habe ich die Linie auch zu einem Pfad zusammengefasst (bei getrennten Pfaden kommt es sonst nämlich zu komischen Stellen and den Ecken) und alle Koordinaten so verschoben, dass die erste (0,0) wird.
Außerdem habe ich die Bilder in den Mittleren Kopf (\cehead,\cohead) verlegt, dann kann der ganze Rest wie voreingestellt bleiben und du spart ein paar Zeilen überflüssigen Code.
\RequirePackage{filecontents}% Änderungen innerhalb der filecontents-Umgebungen überschreiben vorhandene Dateien
\begin{filecontents}{rekg.tex}
\begin{tikzpicture}[
   remember picture, overlay,
   % Ursprung so verschieben, dass er in der unteren linken
   % Ecke der Kopfzeile liegt
   shift = {(current page header area.south west)},
   % zusätzliche Verschiebung des Ursprungs nach unten
   yshift=-1mm,
   % Basisvektoren setzen
   x = 0.5pt, y = -0.5pt,
]
      \draw
         (0, 0)
         -- (559.835, 0)
         .. controls (562.283, -0.106) and (562.139, -6.291) .. (566.884, -6.291)
         .. controls (572.212, -6.291) and (571.97, -0.106) .. (574.304, 0)
         -- (588.772, 0)
         -- (590.746, 8.062)
         -- (594.034, -41.656)
         -- (596.665, 11.421)
         -- (599.296, 0)
         -- (609.161, 0)
         .. controls (612.449, -0.672) and (613.712, -13.316) .. (618.368, -13.478)
         .. controls (623.243, -13.648) and (624.945, -0.672) .. (628.233, 0)
         -- (638.233, 0)
      ;
\end{tikzpicture}
\end{filecontents}

\begin{filecontents}{lekg.tex}
\begin{tikzpicture}[
   remember picture, overlay,
   % Ursprung so verschieben, dass er in der unteren rechten
   % Ecke der Kopfzeile liegt
   shift = {(current page header area.south east)},
   % zusätzliche Verschiebung des Ursprungs nach unten
   yshift=-1mm,
   % Zusätzliche Verschiebung, die eigentlich nicht nötig sein sollte (Bug?)
   xshift = 1.5mm,
   % Basisvektoren setzen2
   x = -0.5pt, y = -0.5pt,
]
      \draw
         (0, 0)
         --
          (559.835, 0)
         .. controls (562.283, -0.106) and (562.139, -6.291) .. (566.884, -6.291)
         .. controls (572.212, -6.291) and (571.97, -0.106) .. (574.304, 0)
         -- (588.772, 0)
         -- (590.746, 8.062)
         -- (594.034, -41.656)
         -- (596.665, 11.421)
         -- (599.296, 0)
         -- (609.161, 0)
         .. controls (612.449, -0.672) and (613.712, -13.316) .. (618.368, -13.478)
         .. controls (623.243, -13.648) and (624.945, -0.672) .. (628.233, 0)
         -- (638.233, 0)
      ;
\end{tikzpicture}
\end{filecontents}

\documentclass[
   paper=a5,
   twoside=true,
   headinclude=true,
   footinclude=true,
   BCOR=10mm,
   fontsize=10pt,
   headings=small,
   DIV=calc
]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{blindtext}

\usepackage{tikz}
\usepackage{tikzpagenodes}

\usepackage[automark]{scrlayer-scrpage}

\cehead{\input{rekg.tex}}
\cohead{\input{lekg.tex}}

\ofoot{\pagemark}

\begin{document}
\blinddocument
\end{document}
Noch besser wäre es, mit relativen Koordinaten zu arbeiten und die page nodes stärker zu nutzen, denn die aktuelle Linie passt nur zu genau einer Textbreite und muss ggf. von Hand angepasst werden.

von Bartman » Mi 17. Aug 2016, 16:15

Meine Änderung Deines Beispiels ist eher für Leser gedacht, die etwas kompaktes suchen, um es gleich ausprobieren zu können, ohne herumkopieren zu müssen.
\RequirePackage{filecontents}% Änderungen innerhalb der filecontents-Umgebungen überschreiben vorhandene Dateien
\begin{filecontents}{rekg.tex}
\begin{tikzpicture}[remember picture, overlay]
\node[xshift=1.733cm, yshift=6.148cm] at (current page.north west)
{\begin{tikzpicture}[
	remember picture,
	overlay,
	line join=round,
	x=1pt, y=-1pt,
    normal ecg/.pic={
        \draw (0,455.0021) -- (559.8345,455.0021);
        \draw (559.8345,455.0021) .. controls (562.2834,454.8958) and
          (562.1385,448.7114) .. (566.8842,448.7114) .. controls (572.2116,448.7114) and
          (571.9695,454.8958) .. (574.3035,455.0021);
        \draw (574.3035,455.0021) -- (588.7723,455.0021);
        \draw (588.7723,455.0021) -- (590.7455,463.0645) -- (594.0339,413.3461)
          -- (596.6647,466.4235) -- (599.2955,455.0021);
        \draw (599.2955,455.0021) -- (609.1605,455.0021);
        \draw (609.1605,455.0021) .. controls (612.4487,454.3298) and
          (613.7118,441.6860) .. (618.3679,441.5241) .. controls (623.2428,441.3542) and
          (624.9447,454.3301) .. (628.2329,455.0021);
        \draw (628.2329,455.0021) -- (638.2329,455.0021);
    }
]
\pic [scale=0.5] at (0, 0)  {normal ecg};
\end{tikzpicture}
};
\end{tikzpicture}
\end{filecontents}

\begin{filecontents}{lekg.tex}
\begin{tikzpicture}[remember picture, overlay]
\node[xshift=1.863cm, yshift=6.148cm] at (current page.north west)
{\begin{tikzpicture}[
	remember picture,
	overlay,
	line join=round,
	x=1pt, y=-1pt,
    normal ecg/.pic={
        \draw (0,455.0021) -- (11.8345,455.0021);
        \draw (11.8345,455.0021) .. controls (14.2834,454.8958) and
          (14.1385,448.7114) .. (18.8842,448.7114) .. controls (24.2116,448.7114) and
          (23.9695,454.8958) .. (26.3035,455.0021);
        \draw (26.3035,455.0021) -- (40.7723,455.0021);
        \draw (40.7723,455.0021) -- (42.7455,463.0645) -- (46.0339,413.3461)
          -- (48.6647,466.4235) -- (51.2955,455.0021);
        \draw (51.2955,455.0021) -- (61.1605,455.0021);
        \draw (61.1605,455.0021) .. controls (64.4487,454.3298) and
          (65.7118,441.6860) .. (70.3679,441.5241) .. controls (75.2428,441.3542) and
          (76.9447,454.3301) .. (80.2329,455.0021);
        \draw (80.2329,455.0021) -- (638.2329,455.0021);
    }
]
\pic [scale=0.5] at (0, 0)  {normal ecg};
\end{tikzpicture}
};
\end{tikzpicture}
\end{filecontents}

\documentclass[
	paper=a5,
	pagesize,
	abstract=true,% <- geändert
	twoside=true,
	headinclude=true,
	footinclude=true,
	BCOR=10mm,
	openright,
	fontsize=10pt,
	headings=small,
	DIV=calc
]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{tikz}
\usepackage[automark]{scrlayer-scrpage}
\pagestyle{scrheadings}
\clearscrheadfoot  
\setlength{\skip\footins}{20mm}  
\automark[chapter]{chapter}  
\automark*[section]{}
\lehead{\slshape \headmark\raisebox{\ht\strutbox}[0pt]{%
    \input{rekg.tex} %ekg in kopfzeile
  }}
\chead{}
\rohead{
  \slshape \headmark\raisebox{\ht\strutbox}[0pt]{%
    \input{lekg.tex} %ekg in kopfzeile
  }%
}
%
\ifoot{}
\cfoot{}
\ofoot{\pagemark}
%
\begin{document}
\blinddocument% <- geändert
\end{document}
Ich habe
\foreach \x in {0,...,0}{
entfernt, weil es nur zu einem Schleifendurchlauf mit \x = 0 führt.

von Nina » Mi 17. Aug 2016, 15:21

Ne, den Verlauf habe ich nicht über Inkscape exportiert sondern vor einer ganzen Weile mal eine Vorlage dazu im Internet gefunden und dieses nun so bearbeitet, dass es für mich passt. Das waren nun aber auch meine ersten Erfahrungen mit dem Packet TikZ.

von iTob » Mi 17. Aug 2016, 15:05

Sieht doch im Grunde ganz gut aus. Auch wenn ich mich frage, ob man die Werte nicht etwas glatter hätte angeben können. Ich schätze mal, die Linien hast du aus Ikscape exportiert oder? Und den Umweg mit dem Pic kann man sich auch schenken, wenn man es eh nur einmal braucht ...

von Nina » Mi 17. Aug 2016, 14:27

Vielen lieben Dank dir.
In die Richtung die komplette Trennlinie ins TikZ zu integrieren hab ich auch gedacht und dann aber doch gehofft, dass es eine ganz elegante Lösung gibt. Nach ausgiebiger Spielerei habe ich nun je ein TikZ (Trennlinie+ekg) für gerade und ungerade Seiten erstellt und diese eingebunden:
\documentclass[paper=a5, pagesize, abstracton, twoside=true, headinclude=true, footinclude=true, BCOR=10mm, openright,fontsize=10pt, headings=small, DIV=calc]{scrreprt}  
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{tikz}
\usepackage[automark]{scrlayer-scrpage}
\pagestyle{scrheadings}
\clearscrheadfoot  
\setlength{\skip\footins}{20mm}  
\automark[chapter]{chapter}  
\automark*[section]{}
\lehead{\slshape \headmark\raisebox{\ht\strutbox}[0pt]{%
    \input{rekg.tex} %ekg in kopfzeile
  }}
\chead{}
\rohead{
  \slshape \headmark\raisebox{\ht\strutbox}[0pt]{%
    \input{lekg.tex} %ekg in kopfzeile
  }%
}
%
\ifoot{}
\cfoot{}
\ofoot{\pagemark}
%
\begin{document}
\chapter{Motivation}
\blindtext[10]
\end{document}
lekg und rekg sind hierbei die TikZ-Pictures für linke/rechte Seite:

lekg:
\begin{tikzpicture}[remember picture, overlay]
\node[xshift=1.863cm, yshift=6.148cm] at (current page.north west)
{\begin{tikzpicture}[remember picture, overlay, line join=round, x=1pt, y=-1pt]
\tikzset{
    normal ecg/.pic={
        \draw (0,455.0021) -- (11.8345,455.0021);
        \draw (11.8345,455.0021) .. controls (14.2834,454.8958) and
          (14.1385,448.7114) .. (18.8842,448.7114) .. controls (24.2116,448.7114) and
          (23.9695,454.8958) .. (26.3035,455.0021);
        \draw (26.3035,455.0021) -- (40.7723,455.0021);
        \draw (40.7723,455.0021) -- (42.7455,463.0645) -- (46.0339,413.3461)
          -- (48.6647,466.4235) -- (51.2955,455.0021);
        \draw (51.2955,455.0021) -- (61.1605,455.0021);
        \draw (61.1605,455.0021) .. controls (64.4487,454.3298) and
          (65.7118,441.6860) .. (70.3679,441.5241) .. controls (75.2428,441.3542) and
          (76.9447,454.3301) .. (80.2329,455.0021);
        \draw (80.2329,455.0021) -- (638.2329,455.0021);
    }
}
\foreach \x in {0,...,0}{
\pic [scale=0.5] at (\x*50, 0)  {normal ecg};
}
\end{tikzpicture}
};
\end{tikzpicture}
rekg:
\begin{tikzpicture}[remember picture, overlay]
\node[xshift=1.733cm, yshift=6.148cm] at (current page.north west)
{\begin{tikzpicture}[remember picture, overlay, line join=round, x=1pt, y=-1pt]
\tikzset{
    normal ecg/.pic={
        \draw (0,455.0021) -- (559.8345,455.0021);
        \draw (559.8345,455.0021) .. controls (562.2834,454.8958) and
          (562.1385,448.7114) .. (566.8842,448.7114) .. controls (572.2116,448.7114) and
          (571.9695,454.8958) .. (574.3035,455.0021);
        \draw (574.3035,455.0021) -- (588.7723,455.0021);
        \draw (588.7723,455.0021) -- (590.7455,463.0645) -- (594.0339,413.3461)
          -- (596.6647,466.4235) -- (599.2955,455.0021);
        \draw (599.2955,455.0021) -- (609.1605,455.0021);
        \draw (609.1605,455.0021) .. controls (612.4487,454.3298) and
          (613.7118,441.6860) .. (618.3679,441.5241) .. controls (623.2428,441.3542) and
          (624.9447,454.3301) .. (628.2329,455.0021);
        \draw (628.2329,455.0021) -- (638.2329,455.0021);
    }
}
\foreach \x in {0,...,0}{
\pic [scale=0.5] at (\x*50, 0)  {normal ecg};
}
\end{tikzpicture}
};
\end{tikzpicture}
Produziert zumindest das, was ich mir vorgestellt habe :wink:
Dateianhänge
text.pdf
(89.15 KiB) 263-mal heruntergeladen

von iTob » Di 16. Aug 2016, 22:08

Entweder du verschiebst das eingebundene Bild so lang, bis es genau passt (mit \makebox, \raisbox und Co) oder du zeichnest du komplette Linie mit Tilz, nutzt den current page Node zusammen mit remember picture und oberlay … bin grad nich am Rechner, deswegen hoffe ich, die Hinweise helfen dir auch ohne Code ;-)

TikZ-Bild und Trennlinie der Kopfzeile kombinieren

von Nina » Di 16. Aug 2016, 17:46

Hallo zusammen,

ich würde gerne die Trennlinie unterhalb der Kopfzeile so modifizieren, dass sie nach außen hin dem Verlauf eines EKGs entspricht. Wie stelle ich es denn am Besten an, den Verlauf in die Linie zu integrieren, sodass diese also direkt in den Verlauf übergeht? Momentan ist die Kurve einfach als Abbildung über der Trennlinie angeordnet:
\documentclass[paper=a5, pagesize, abstracton, twoside=true, headinclude=true, footinclude=true, BCOR=10mm, openright,fontsize=10pt, headings=small, DIV=calc]{scrreprt}   
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{tikz}
\usepackage[automark, headsepline]{scrlayer-scrpage} 
\pagestyle{scrheadings}
\clearscrheadfoot	
\setlength{\skip\footins}{20mm}   
\automark[chapter]{chapter}   
\automark*[section]{}		
\ihead{\slshape \headmark}
\chead{}
\ohead{
  \raisebox{\ht\strutbox}[0pt]{%
    \input{ekg.tex} %ekg in kopfzeile
  }%
}
%
\ifoot{}
\cfoot{}
\ofoot{\pagemark}
%
\begin{document}
\chapter{Motivation}
\blindtext[5]
\end{document}

das ekg wird als tikzpicture erzeugt:
\begin{tikzpicture}[line join=round, x=1pt, y=-1pt]
\tikzset{
    normal ecg/.pic={
        \draw (0,455.0021) -- (11.8345,455.0021);
        \draw (11.8345,455.0021) .. controls (14.2834,454.8958) and
          (14.1385,448.7114) .. (18.8842,448.7114) .. controls (24.2116,448.7114) and
          (23.9695,454.8958) .. (26.3035,455.0021);
        \draw (26.3035,455.0021) -- (40.7723,455.0021);
        \draw (40.7723,455.0021) -- (42.7455,463.0645) -- (46.0339,413.3461)
          -- (48.6647,466.4235) -- (51.2955,455.0021);
        \draw (51.2955,455.0021) -- (61.1605,455.0021);
        \draw (61.1605,455.0021) .. controls (64.4487,454.3298) and
          (65.7118,441.6860) .. (70.3679,441.5241) .. controls (75.2428,441.3542) and
          (76.9447,454.3301) .. (80.2329,455.0021);
        \draw (80.2329,455.0021) -- (90.2329,455.0021);
%       \draw  (80.2329,455.0021) .. controls (81.4852,455.0021) and
%          (82.2677,452.8462) .. (84.1792,452.9863) .. controls (85.8717,453.1101) and
%          (86.4830,455.0021) .. (87.4678,455.0021);
%        \draw (87.4678,455.0021) -- (100,455.0021);
    }
}
\foreach \x in {0,...,0}{
\pic [scale=0.5] at (\x*50, 0)  {normal ecg};
}
\end{tikzpicture}
Vielen lieben Dank schon mal

Nach oben