
삼각함수를 도 단위로 그려야 하는 축을 생성하는 다음 코드가 있습니다. 인쇄하여 수학 시험지의 일부로 사용됩니다. 그러나 x
축은 30도의 단계 크기여야 합니다.
x-axis
my 의 각 레이블에 30을 곱하는 코드를 어떻게 수정합니까 ? 즉, 라벨은 0; 30; 60; 90; 120; ...
다음과 같아야 합니다.
\documentclass[paper=a4, fontsize=11pt]{scrartcl}
\usepackage{tikz}
\usepackage{amsmath,amsfonts,amsthm}
\usepackage{gensymb}
\begin{document}
\begin{tikzpicture}
\draw[step = 0.5 cm, gray, very thin] (-1, -4) grid ( 13, 4);
\draw[thick, ->] (-1,0) -- (13,0) node[anchor = north west] {$x$};
\draw[thick, ->] (0,-4) -- (0,4) node[anchor = south east] {$y$};
\foreach \x in {1,...,13}
\draw (\x cm, 1pt) -- (\x cm, -1pt) node[anchor = north] {$\x \degree$};
\foreach \y in {-3,..., 3}
\draw (1pt, \y cm) -- (-1pt, \y cm) node[anchor = east] {$\y$};
\end{tikzpicture}
\end{document}
답변1
\foreach
학위를 포함 [evaluate=\x as \degree using int(\x*30)]
하고 $\degree^\circ$
인쇄하도록 귀하의 진술을 약간 변경했습니다 . 숫자를 변경하여 단계를 변경할 수 있습니다 30
.
산출
암호
\documentclass[margin=10pt]{standalone}
\usepackage{amsmath,amsfonts,amsthm}
\usepackage{gensymb}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[step = 0.5 cm, gray, very thin] (-1, -4) grid ( 13, 4);
\draw[thick, ->] (-1,0) -- (13,0) node[anchor = north west] {$x$};
\draw[thick, ->] (0,-4) -- (0,4) node[anchor = south east] {$y$};
\foreach \x [evaluate=\x as \degree using int(\x*30)] in {1,...,12}{
\draw (\x cm, 1pt) -- (\x cm, -1pt) node[anchor = north] {$\degree^\circ$};
}
\foreach \y in {-3,-2,-1,1,2,3}
\draw (1pt, \y cm) -- (-1pt, \y cm) node[anchor = east] {$\y$};
\end{tikzpicture}
\end{document}
답변2
\pgfmathparse
곱하여 사용할 수 있습니다 . 소수점 이하 자릿수를 얻으려면 int
다음과 같은 것이 필요할 수도 있습니다.
node[anchor = north] {\pgfmathparse{int(30*\x)}$\SI{\pgfmathresult}{\degree}$};
siunitx
학위에 사용했음을 참고하세요 .
\documentclass{article}
\usepackage{tikz}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\draw[step = 0.5 cm, gray, very thin] (-1, -4) grid ( 13, 4);
\draw[thick, ->] (-1,0) -- (13,0) node[anchor = south west] {$x$};
\draw[thick, ->] (0,-4) -- (0,4) node[anchor = south west] {$y$};
\foreach \x in {1,...,13}
\draw (\x cm, 1pt) -- (\x cm, -1pt) node[anchor = north] {\pgfmathparse{int(30*\x)}$\SI{\pgfmathresult}{\degree}$};
\foreach \y in {-3,-2,-1,1,2, 3}
\draw (1pt, \y cm) -- (-1pt, \y cm) node[anchor = east] {$\y$};
\end{tikzpicture}
\end{document}
답변3
관심을 가질만한 MetaPost를 사용하여 이를 수행하는 방법입니다. 주로 x축에 대한 관련 스케일을 선택하고 \mplibtextextlabel{enable}
서문의 지침에 따라 이 축의 레이블 내부에 루프를 허용하는 문제입니다. 이는 각 명령의 문자열 인수가 label
매크로를 통해 (Lua)LaTeX에 의해 조판되도록 하며 textext
, 일반적인 btex … etex
플래그보다 훨씬 더 유연합니다.
\documentclass[border=2mm]{standalone}
\usepackage{siunitx}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
numeric u, v, xmin, xmax, xstep, ymin, ymax, ystep;
u = cm/30; xmin = -30; xmax = 390; xstep = 15;
v = cm; ymax = 4 = -ymin; ystep = .5;
beginfig(1);
% Grid
drawoptions(withcolor .8white);
for i = ceiling(xmin/xstep) upto floor(xmax/xstep):
draw ((i*xstep, ymin) -- (i*xstep, ymax)) xscaled u yscaled v;
endfor
for j = ceiling(ymin/ystep) upto floor(ymax/ystep):
draw ((xmin, j*ystep) -- (xmax, j*ystep)) xscaled u yscaled v;
endfor
drawoptions(); labeloffset := 5bp;
% x-axis marks and labels
for i = 2xstep step 2xstep until xmax-2xstep:
if i<>0:
label.bot("$" & decimal i & "\si\degree$", (i*u, 0));
draw (i*u, -2bp) -- (i*u, 2bp);
fi
endfor
% y-axis marks and labels
for j = ymin+1 step 2ystep until ymax-1:
if j<>0:
draw(-2bp, j*v) -- (2bp, j*v);
label.lft("$" & decimal j & "$", (0, j*v));
fi
endfor
% Axes and other labels
drawarrow (xmin*u, 0) -- (xmax*u, 0);
drawarrow (0, ymin*v) -- (0, ymax*v);
labeloffset := 3bp; label.llft("$O$", origin);
label.bot("$x$", (xmax*u, 0)); label.lft("$y$", (0, ymax*v));
endfig;
\end{mplibcode}
\end{document}
LuaLaTeX로 조판됩니다. 산출:
답변4
PSTricks 솔루션:
\documentclass{article}
\usepackage[margin = 3cm]{geometry}
\usepackage{pst-plot}
\usepackage{siunitx}
\usepackage{xfp}
\makeatletter
\def\pst@@@hlabel#1{\ang{\fpeval{30*#1}}}
\makeatother
\begin{document}
\begin{pspicture*}(-1,-4)(13.36,4.4)
\psgrid[subgriddiv = 2, gridcolor = lightgray](-1,-4)(12.9,3.9)
\psaxes{->}(0,0)(-0.99,-3.99)(13,4)[$x$,0][$y$,90]
\end{pspicture*}
\end{document}