TikZ-Bild und Trennlinie der Kopfzeile kombinieren

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


Nina
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 16. Aug 2016, 17:23

TikZ-Bild und Trennlinie der Kopfzeile kombinieren

Beitrag von Nina »

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

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

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 ;-)
Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).

Nina
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 16. Aug 2016, 17:23

Beitrag von Nina »

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

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

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 ...
Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).

Nina
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 16. Aug 2016, 17:23

Beitrag von Nina »

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.

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

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.
Zuletzt geändert von Bartman am Mi 17. Aug 2016, 20:13, insgesamt 1-mal geändert.

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

@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.
Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).

Gast

Beitrag von Gast »

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.

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

Beitrag von esdd »

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}

Nina
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 16. Aug 2016, 17:23

Beitrag von Nina »

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

Antworten