Gå til innhold

Den middels store LaTeX-tråden


Anbefalte innlegg

Videoannonse
Annonse

Tusen takk for hjelpa torbjørn, dette kan bli virkelig nyttig når jeg en gang blir lærer =)

 

Spør her og jeg. Litt usikker på hvor jeg skal stille spørsmålene mine.

 

Som sagt koden din fungerer utmerket. Men noen ide, om hvordan en kan snu rekkefølgen, og ha muligheter til å legge inn x, der funksjonen er udefinert? For eksempel

 

chart?cht=tx&chl= \frac{(2-x)(x+1)}{x(1-x)}

Endret av Nebuchadnezzar
Lenke til kommentar

Som sagt koden din fungerer utmerket. Men noen ide, om hvordan en kan snu rekkefølgen, og ha muligheter til å legge inn x, der funksjonen er udefinert? For eksempel

 

chart?cht=tx&chl= \frac{(2-x)(x+1)}{x(1-x)}

 

Hva mener du med dette? Er for mange år siden jeg ha holdt på med slikt :p

 

Edit. Tror jeg skjønte hva du vil nå. Kan du ikke bare skrive det inn egentlig? Du veit jo hvor den er udefinert, og det er jo bare å legge inn en node på det punktet.

Endret av drgz
Lenke til kommentar

Lagt til to linjer og endret "funksjonen" til å ta inn fem variable. Dvs en utvidelse til:

 

\functionalline[<LaTeX math code>]{<expression>}{<vertical position>}{<list of zeros>}{<list of infs>}.

 

 

\documentclass{article}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{calc}
\usetikzlibrary{shapes}
\usetikzlibrary{matrix}
\usetikzlibrary{positioning}
\usetikzlibrary{plotmarks}
\usetikzlibrary{patterns}
\usetikzlibrary{decorations.pathmorphing}
\usepgflibrary{decorations.pathreplacing}

\begin{document}

\tikzstyle{snakeline} = [connector, decorate, decoration={pre length=0.2cm,
                        post length=0.2cm, snake, amplitude=.8mm,
                        segment length=2mm},semithick,->]

\pgfplotsset{
   shift down/.style={
        y filter/.code={\pgfmathparse{\pgfmathresult*(#1)}}
   },
   shift down/.default=1,
   every axis plot post/.style={restrict y to domain=0.5:inf},
   positive/.style={
       no markers,
       blue
   },
   negative/.style={
       no markers,
       red
   },
   /tikz/function label/.style={
       anchor=east
   },
   step functionallinenumber/.code={
       \stepcounter{functionallinenumber}
   }
}

\makeatletter
\newcommand\functionalline[5][\@empty]{
   \ifx#1\@empty
       \edef\equation{#2}
   \else
       \edef\equation{#1}
   \fi
   \edef\plots{
       \noexpand\addplot [negative, shift down=#3] {#2<0};
       \noexpand\addplot [positive, shift down=#3] {#2>0};
       \noexpand\node at (axis cs:\noexpand\pgfkeysvalueof{/pgfplots/xmin},#3) [function label] {$\equation$};
   }
   \plots
   \pgfplotsinvokeforeach {#4} {
       \node at (axis cs:##1,#3) [fill=white, inner sep=1pt] {0};
   }   
   \pgfplotsinvokeforeach {#5} {
       \node at (axis cs:##1,#3) [fill=white, inner sep=1pt] {x};
   }   
}

\newenvironment{functionallines}[1][-3:3]{
   \begin{tikzpicture}
   \begin{axis}[
       axis x line=top,
       hide y axis,
       ymin=0,enlarge x limits=upper,
       domain=#1,
       restrict y to domain=0.5:99,
       samples=100,
       y dir=reverse, y = -0.5cm, 
       xlabel=$x$, clip=false
   ]
}{
   \end{axis}
   \end{tikzpicture}
}



\begin{functionallines}
   \functionalline{x+1}{1}{-1}{}
\functionalline{x}{2}{0}{}
   \functionalline{2-x}{3}{2}{}
\functionalline{1-x}{4}{1}{}
   \functionalline[f(x)]{2-x)*(1-x)/(x*(x-1))}{5}{-1,2}{0,1}
\end{functionallines}


\end{document}

 

 

Endret av drgz
Lenke til kommentar

Ah, det var ein enkel og grei løysing. Trur eg tenkjer alt for komplisert av og til ...

 

Likevel kan eg foreslå ein forbetring, ved hjelp av xparse-pakka:

 

 

\documentclass{article}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{xparse}

\pgfplotsset{
   shift down/.style={
        y filter/.code={\pgfmathparse{\pgfmathresult*(#1)}}
   },
   shift down/.default=1,
   every axis plot post/.style={restrict y to domain=0.5:inf},
   positive/.style={
       no markers,
       blue
   },
   negative/.style={
       no markers,
       red
   },
   /tikz/function label/.style={
       anchor=east
   },
   step functionallinenumber/.code={
       \stepcounter{functionallinenumber}
   }
}

\makeatletter
\NewDocumentCommand\functionalline{O{\@empty}mmmO{}}{
   \ifx#1\@empty
       \edef\equation{#2}
   \else
       \edef\equation{#1}
   \fi
   \edef\plots{
       \noexpand\addplot [negative, shift down=#3] {#2<0};
       \noexpand\addplot [positive, shift down=#3] {#2>0};
       \noexpand\node at (axis cs:\noexpand\pgfkeysvalueof{/pgfplots/xmin},#3) [function label] {$\equation$};
   }
   \plots
   \pgfplotsinvokeforeach {#4} {
       \node at (axis cs:##1,#3) [fill=white, inner sep=1pt] {0};
   }   
   \pgfplotsinvokeforeach {#5} {
       \node at (axis cs:##1,#3) [fill=white, inner sep=1pt] {x};
   }   
}
\makeatother

\newenvironment{functionallines}[1][-3:3]{
   \begin{tikzpicture}
   \begin{axis}[
       axis x line=top,
       hide y axis,
       ymin=0,enlarge x limits=upper,
       domain=#1,
       restrict y to domain=0.5:99,
       samples=100,
       y dir=reverse, y = -0.5cm, 
       xlabel=$x$, clip=false
   ]
}{
   \end{axis}
   \end{tikzpicture}
}

\begin{document}

\begin{functionallines}
   \functionalline{x+1}{1}{-1}
       \functionalline{x}{2}{0}
   \functionalline{2-x}{3}{2}
       \functionalline{1-x}{4}{1}
   \functionalline[f(x)]{2-x)*(1-x)/(x*(x-1))}{5}{-1,2}[0,1]
\end{functionallines}

\end{document}

 

 

Forskjellen er at her er det to valfrie argument, der det siste er brotpunkt i funksjonen. Då slepp ein å skrive dei tomme krøllparentesane kvar gong, i staden er det berre å skrive dei same x-verdiane i klammer som eit femte argument om ein har brotpunkt.

Endret av Torbjørn T.
  • Liker 1
Lenke til kommentar

Dere er så geniale bøyer meg i støvet. Skal lære meg dette en gang, men nå har jeg 5 fag og jobber kanskje 50t i uka. Så ikke tid akkuratt nå.

 

Føler jeg er så pirkete når dere er så snille å hjelpe meg ..

 

0. Nederste linjen er feil. Om du sammenligner med min. Altså når den er blå og rød er feil.

 

1. Jeg har ikke noe problem med å la blå være negativ og rød positiv. Beklager om dette skapte forvirring. Dette tror jeg i det minste jeg klarer å forandre :p

 

2. Hvordan spesifiserer du i koden om den begynner som negativ, eller begynner som positiv? Klarer ikke helt å se det.

 

3. Skulle gjerne likt å ha x, og ikke 0 i de linjene som er udefinert. Brukte et lite programm som ikke gav meg muligheten til det for å lage bildet over. Men utifra koden ser det ut som jeg bare kan skrive

 

\begin{functionallines}

\functionalline{x+1}{1}{-1}{}

\functionalline{x}{2}{}{0}

\functionalline{2-x}{3}{2}{}

\functionalline{1-x}{4}{}{1}

\functionalline[f(x)]{2-x)*(1-x)/(x*(x-1))}{5}{-1,2}{0,1}

\end{functionallines}

 

Stemmer dette? (har ikke tex på denn maskina)

 

4. Den x`en som er label, irriterer meg.. Kan en plassere den et annet sted? Og her er den alternative versjonen av koden som jeg foretrekker. Fordi den avgrenser fortegnsskjemaet litt fra resten av dokumentet. Er det noen grunn for at man foretrekker koden ovenfor? (horisontale streker osv)

 

 

\documentclass{article}

\usepackage{pgfplots}

 

\begin{document}

 

\pgfplotsset{

shift down/.style={

y filter/.code={\pgfmathparse{\pgfmathresult*(#1)}}

},

shift down/.default=1,

every axis plot post/.style={restrict y to domain=0.5:inf},

positive/.style={

no markers,

red

},

negative/.style={

no markers,

blue

},

/tikz/function label/.style={

anchor=east

},

step functionallinenumber/.code={

\stepcounter{functionallinenumber}

}

}

 

\makeatletter

\newcommand\functionalline[4][\@empty]{

\ifx#1\@empty

\edef\equation{#2}

\else

\edef\equation{#1}

\fi

\edef\plots{

\noexpand\addplot [negative, shift down=#3, forget plot] {#2<0};

\noexpand\addplot [positive, shift down=#3, forget plot] {#2>0};

\noexpand\node at (axis cs:\noexpand\pgfkeysvalueof{/pgfplots/xmin},#3) [function label] {$\equation$};

}

\plots

\pgfplotsinvokeforeach {#4} {

\node at (axis cs:##1,#3) [fill=white, inner sep=1pt] {0};

}

}

 

\newenvironment{functionallines}[2][-3:3]{

\begin{tikzpicture}

\begin{axis}[

%axis x line=top,

xtick={#2},

grid=major,

xticklabel pos=right,

hide y axis,

x axis line style={draw=none},

xtick pos=right,

major tick length=0pt,

enlarge x limits=false,

enlarge y limits={abs=0.75},

domain=#1,

restrict y to domain=0.5:99,

samples=100,

y dir=reverse, y = -0.5cm,

clip=false

]

}{

\coordinate (bottom right) at (rel axis cs:1,0);

\coordinate (top right) at (rel axis cs:1,1);

\end{axis}

\draw [-latex] (top right-|current bounding box.west) -- (top right) node

{$x$};

\draw (bottom right) -- (bottom right-|current bounding box.west);

\end{tikzpicture}

}

 

 

 

\begin{functionallines}{-2,1}

\functionalline{x-1}{1}{1}

\functionalline{x+2}{2}{-2}

\functionalline[f(x) = x^2+x-2]{x^2+x-2}{3}{-2,1}

\end{functionallines}

 

\hspace{1cm}

 

\begin{functionallines}[-20:380]{0,90,180,270,360}

\functionalline[\cos(x)]{cos(x)}{1}{90,270}

\functionalline[\sin(x)]{sin(x)}{2}{0,180,360}

\functionalline[\cos(x) \cdot \sin(x)]{cos(x) * sin(x)}{3}{0,90,180,270,360}

\end{functionallines}

 

\end{document}

 

 

 

Til slutt. Hva gjør en med funksjoner som for eksempel x^4 eller x^2(x^2-1)?

Problemet med disse er at de har samme farge på begge sider av lihetstegnet.

 

zitTX.png

 

Føler jeg aldri blir fornøyd og bare kommer med masse krav og spørsmål, så jeg får bare beklage.

Lenke til kommentar

0) Jeg la inn feil funksjon i koden, derfor feil fortegn. Sjekk her:

 

1) Hehe, greit. Men du bør begynne å uttrykke det klarere, for ofte skriver du som en hest. ;)

 

2) Hva mener du her?

 

3) Med Torbjørn sin kode trenger du ikke å skrive {} som femte argument hvis funksjonen ikke har singulariteter. F.eks \functionallines{x}{1}{0}. Derimot har du f.eks \functionalline[f(x)]{1/x}{2}{}[0].

 

4) Hvor vil du plassere den da? Med TikZ kan du gjøre hva du vil.

 

5) Vel. x^4 er jo positiv for alle reelle verdier av x, så da blir det jo positivt.

 

Og at du har fem fag er ingen unnskyldning til å ikke lære seg. Det semesteret jeg lærte meg LaTeX ordentlig hadde jeg syv fag.

Endret av drgz
  • Liker 1
Lenke til kommentar

2. Kva meiner du? Alle linjene er plott av funksjonar. Du spesifiserer ein funksjon, pgfplots finn ut om den er negativ eller positiv, og plotter med ei raud eller blå linje alt ettersom. Ikkje noko meir magi enn å plotte ein funksjon i GeoGebra med ulike definisjonsmengder og fargar på linjene. Kva x-verdiar som skal plottast kan ein spesifisere med eit valfritt argument til functionallines omgivnaden, t.d.

\begin{functionallines}[-5:3]{-4,0,2}

spesifiserer at linjene går frå x = -5 til x = 3, og at det eksisterer nullpunkt for x-verdiane -4, 0 og 2.

 

3. Ja, med koden til drgz kan du det, men sjå nedanfor.

 

4. Den x-en som i siste versjon av koden til Jake står til høgre for x-aksen? Kor vil du ha den?

 

 

Under er litt meir kode, som nyttar seg av Jake sitt siste forslag, noko endra, der eg har tatt med drgz sitt forslag og mi forbetring av det for å putte inn x-ar i brotpunkt (og litt lorem ipsum):

 

 

\documentclass{article}
\usepackage{pgfplots}
\usepackage{xparse}
\usepackage{lipsum}

\pgfplotsset{
   shift down/.style={
        y filter/.code={\pgfmathparse{\pgfmathresult*(#1)}}
   },
   shift down/.default=1,
   every axis plot post/.style={restrict y to domain=0.5:inf},
   positive/.style={
       no markers,
       red
   },
   negative/.style={
       no markers,
       blue
   },
   /tikz/function label/.style={
       anchor=east
   },
   step functionallinenumber/.code={
       \stepcounter{functionallinenumber}
   }
}

\makeatletter
\NewDocumentCommand\functionalline{O{\@empty}mmmO{}}{
   \ifx#1\@empty
       \edef\equation{#2}
   \else
       \edef\equation{#1}
   \fi
   \edef\plots{
       \noexpand\addplot [negative, shift down=#3,forget plot] {#2<0};
       \noexpand\addplot [positive, shift down=#3,forget plot] {#2>0};
       \noexpand\node at (axis cs:\noexpand\pgfkeysvalueof{/pgfplots/xmin},#3) [function label] {$\equation$};
   }
   \plots
   \pgfplotsinvokeforeach {#4} {
       \node at (axis cs:##1,#3) [fill=white, inner sep=1pt] {0};
   }   
   \pgfplotsinvokeforeach {#5} {
       \node at (axis cs:##1,#3) [fill=white, inner sep=1pt] {x};
   }   
}
\makeatother
\newenvironment{functionallines}[2][-3:3]{
   \begin{tikzpicture}
   \begin{axis}[
       %axis x line=top,
       xtick={#2},
       grid=major,
       xticklabel pos=right,
       hide y axis,
       x axis line style={draw=none},
       xtick pos=right,
       major tick length=0pt,
       enlarge x limits=false,
       enlarge y limits={abs=0.75},
       domain=#1,
       restrict y to domain=0.5:99,
       samples=100,
       y dir=reverse, y = -0.5cm,
       clip=false
   ]
}{
   \coordinate (top left) at (rel axis cs:0,1);
   \coordinate (top right) at (rel axis cs:1,1);
   \end{axis}
   \draw [-latex,shorten >=-.3cm] (top left) -- (top right) node [right=0.4cm] {$x$};
   \end{tikzpicture}
}

\begin{document}
\lipsum[1]
\begin{center}
\begin{functionallines}[-2:3]{-1,0,1,2}
   \functionalline{x+1}{1}{-1}
   \functionalline{x}{2}{0}
   \functionalline{2-x}{3}{2}
   \functionalline{1-x}{4}{1}
   \functionalline[f(x)]{2-x)*(1-x)/(x*(x+1))}{5}{-1,2}[0,1]
\end{functionallines}
\end{center}
\lipsum[2]
\end{document}

 

post-21406-0-24147000-1317939385_thumb.png

 

So kva skjer/korleis bruker du dette?

 

Om me ser på omgivnaden:

\begin{functionallines}[-2:3]{-1,0,1,2}
   \functionalline{x+1}{1}{-1}
   \functionalline{x}{2}{0}
   \functionalline{2-x}{3}{2}
   \functionalline{1-x}{4}{1}
   \functionalline[f(x)]{2-x)*(1-x)/(x*(x+1))}{5}{-1,2}[0,1]
\end{functionallines}

Som nemnt har functionallines-omgivnaden eit valfritt argument for å spesifisere kva x-verdiar linjene skal gå mellom. Standard er frå -3 til 3, her har eg endra dette til [-2,3]. Det obligatoriske argumentet som kjem etterpå spesifiserer kva x-verdiar som har eit nullpunkt. I dette tilfellet finst det altso nullpunkt for x-verdiane -1, 0, 1 og 2.

 

functionalline-kommandoen kan ta fem argument, der det fyrste og det femte er valfritt. (Valfrie argument skriv ein i klammer, obligatoriske argument i krøllparentesar.) Om me ser nærare på den siste av desse,

\functionalline[f(x)]{2-x)*(1-x)/(x*(x+1))}{5}{-1,2}[0,1]

ser me at alle fem argument er brukt.

  1. Det fyrste er eit valfritt argument, som du bruker om du vil at noko anna enn funksjonsuttrykket skal skrivast til venstre for linja. Her er argumentet f(x), og dette står der.
  2. Sjølve funksjonen, eller faktoren. Dette er det pgfplots plotter.
  3. Kva linjenummer det er. Slik kommandoen er definert vert kvar linje flytta ned med denne verdien. Hadde du brukt same tal to gonger ville du fått to linjer oppå kvarandre.
  4. Dei x-verdiane der det finst nullpunkt, skild med komma. Kommandoen iterer gjennom alle elementa i denne lista, og skriv eit nulltal for kvar x-verdi.
  5. Dei x-verdiane der det finst brotpunkt. Slik kommandoen er definert her, er dette òg eit valfritt argument, dermed klammer. Det fungerer på same måte som med nullpunkta, men her vert det skrive ein x i staden for 0.

 

Opprinneleg var det ei ekstra linje nederst, og den øvste linja gjekk over funksjonsuttrykka, men det har eg endra på. Kan endre tilbake om du vil det.

 

 

Og til sist, om x4, sidan pgfplots ikkje har noko problem med å plotte det, er det ikkje noko problem. Du får ei heilt positiv linje, med eit nullpunkt for x = 0.

  • Liker 2
Lenke til kommentar

Og no har Jake oppdatert svaret sitt med ei automatisk løysing.

 

 

Fullstendig urelatert til den pågåande diskusjonen:

tkz-euclide er ganske so genial! Synd dokumentasjonen berre er på fransk, men ein kan finne ut ein del berre ved å sjå på døma.

 

 

 

\documentclass{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
 \tkzInit[ymin=-1,ymax=5,xmin=-1,xmax=5]
 \tkzClip 
 \tkzDefPoint(0,0){A}
 \tkzDefPoint(4,0){B}
 \tkzDefPoint(0,4){C}
 \tkzDefCircle[in](A,B,C)
   \tkzGetPoint{S}
   \tkzGetLength{rSN}
 \tkzDrawPoints(A,B,C,S)
 \tkzDrawCircle[R,blue](S,\rSN pt)
 \tkzDrawPolygon(A,B,C)
 \tkzInterLC[R](A,C)(S,\rSN pt) \tkzGetFirstPoint{D}
 \tkzInterLC[R](B,C)(S,\rSN pt) \tkzGetFirstPoint{E}
 \tkzInterLL(B,S)(D,E) \tkzGetPoint{F}
 \tkzDrawPoints(D,E,F)
 \tkzDrawSegments(D,E B,F)
 \tkzLabelPoints[left](D)
 \tkzLabelPoints[above left](C,F)
 \tkzLabelPoints[below right](B)
 \tkzLabelPoints[below left](A,S)
 \tkzLabelPoints[right](E)
 \tkzMarkAngle[size=0.4 cm](B,F,E)
 \tkzLabelAngle[pos=0.6](B,F,E){$x$}
 \tkzMarkRightAngle(B,A,C)
\end{tikzpicture}
\end{document}

post-21406-0-54929200-1317945275_thumb.png

 

Endret av Torbjørn T.
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...