LaTeX 对线的要求太严格(互质且 mag < 6)。有没有什么包可以让我在两点之间画一条线?
基本上
\line(a,b)(c,d)
或类似的东西
我费尽心思使用该fp
包来计算线条的点,但现在我却无法画出我需要的线条?
我正在寻找一条使用单位长度和某种方式设置其粗细的平滑线。
答案1
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (-3,-3) grid (3,3);
\draw (-2,2) -- (2,-3);
\end{tikzpicture}
\end{document}
解释
- 定义一个画布。
(-3,-3)
是左下角,(3,3)
是右上角。 \draw (-2,2) -- (2,-3);
(-2,2)
从到画一条线(2,-3)
。pdflatex
使用或xelatex
或编译代码latex-dvips-ps2pdf
。- 完毕。
如果不需要,您可以使用\tikz{\draw (-2,2) -- (2,-3);}
或。\tikz\draw (-2,2) -- (2,-3);
tikzpicture
使用以下内容更改单位,将其放在 或 之前的任何\tikz
位置tikzpicture
。
\tikzset
{
x=2cm,% default value is 1cm.
y=3cm,% default value is 1cm.
}
最后一次尝试:
\documentclass{article}
\usepackage{tikz}
\begin{document}
I want to draw a red line of thickness 1 mm, one unit in horizontal direction must be equal to 1.1 cm, and
one unit in vertical direction must be equal to 1.2 cm. Here is the line,
\tikz[x=1.1cm,y=1.2cm]{\draw[line width=1mm,red](-1,1)--(1,-1);}, is it nice?
\end{document}
答案2
嗯,如果不了解更多信息,很难确切知道您想要做什么。这取决于您想如何绘制线条?坐标的单位是什么?
使用tikz
您可以轻松绘制线条。此处单位默认为厘米(如果未指定)。请注意,在上一个示例中,单位指定为英寸,因此使用了英寸。
下面定义的宏\Line
有三个参数,第一个是可选的
1 = 线条样式,由于它是可选的,因此在 内指定
[]
。如果没有提供,则使用线条的默认样式(即黑线)。2、#3 为
(x,y)
样式中的坐标
还有许多其他线条样式选项,您应该参考 TiKZ/PGF 手册。
参考:
代码:
\documentclass{article}
\usepackage{tikz}
\newcommand*{\Line}[3][]{\tikz \draw[#1] #2 -- #3;}%
\begin{document}
\Line{(0,0)}{(3,0)}%
\Line[red, thick]{(0,0)}{(3,0)}%
\Line[blue, thick, dotted]{(0,0)}{(1.00in,0in)}%
\end{document}
如果您想在同一个坐标系中绘制不同的线条,只需将它们放在一个tikzpicture
环境中即可。请注意蓝色虚线从 3.2cm 处开始,紧接着黑线在 3.0cm 处结束的位置。
\documentclass{article}
\usepackage{tikz}
\newcommand*{\Line}[3][]{\draw[#1] #2 -- #3;}%
\begin{document}
\begin{tikzpicture}
\Line{(0,0)}{(3,0)}%
\Line[red, thick]{(0,-0.5)}{(3,-0.5)}%
\Line[blue, thick, dotted]{(3.2cm,0)}{(1.5in,0in)}%
\end{tikzpicture}
\end{document}
答案3
做这件事有很多种方法
1) 页面中的绝对位置。我的意思是,页面左南角的坐标为 (0,0),东北角的坐标为 (21,29.7) (a4paper)。我想从 (a,b) 到 (c,d) 画一条线。
1a)只需一次编译,您就可以使用 eso-pic 和 tikz
\documentclass[a4paper]{scrartcl}
\usepackage{tikz,lipsum,eso-pic}
\makeatletter
\def\myline{\pgfutil@ifnextchar[{\my@line}{\my@line[]}}%
\def\my@line[#1](#2)(#3){%
\AddToShipoutPicture{%
\setlength{\unitlength}{1cm}%
\begin{picture}(0,0)%
\put(0,0){\tikz[overlay] \draw[#1] (#2) -- (#3) ;}%
\end{picture}}}%
\begin{document}
\lipsum[1]
\myline[magenta,thick](0,0)(21,29.7)
\myline[magenta,thick](0,29.7)(21,0)
\myline[blue,ultra thick](10,10)(15,20)
\myline[blue,ultra thick](10,20)(15,5)
\end{document}
1b)有了两个编译,我们只需要 tikz
\documentclass[a4paper]{scrartcl}
\usepackage{tikz,lipsum}
\makeatletter
\def\myline{\pgfutil@ifnextchar[{\my@line}{\my@line[]}}%
\def\my@line[#1](#2)(#3){%
\tikz[overlay,remember picture]%
\draw[#1] ([shift={(#2)}] current page.south west) --
([shift={(#3)}] current page.south west);
}
\begin{document}
\myline[magenta,thick](0,0)(21,29.7)
\myline[magenta,thick](0,29.7)(21,0)
\myline[blue,ultra thick](10,10)(15,20)
\myline[blue,ultra thick](10,20)(15,5)
\end{document}
2)与一个编译相关的位置
\documentclass[a4paper]{scrartcl}
\usepackage{tikz}
\makeatletter
\def\myline{\pgfutil@ifnextchar[{\my@line}{\my@line[]}}%
\def\my@line[#1](#2)(#3){%
\tikz[overlay] \draw[#1] (#2)--(#3);
}%
\begin{document}
In visions\myline[red](0,0)(3,-4) of the dark night\\
I have dreamed of joy departed-\\
But a waking dream of life and light\\
Hath left me broken-hearted.\\
\bigskip
Ah! what is not a dream by day\\
To him whose eyes are cast \\
On things around him with a ray \\
Turned back upon the past? \\
\end{document}
3)页面中定义的两点之间(两个编译)
\documentclass[a4paper]{scrartcl}
\usepackage{tikz}
\makeatletter
\def\myline{\pgfutil@ifnextchar[{\my@line}{\my@line[]}}%
\def\my@line[#1](#2)(#3){%
\tikz[remember picture,overlay] \draw[#1] (#2)--(#3);
}%
\newcommand\mypoint[1] {%
\tikz[remember picture] \path coordinate (#1);}%
\begin{document}
\parindent=0pt
\mypoint{a}In visions of the dark night\\
I have dreamed of joy departed-\\
But a waking dream of life and light\\
Hath left me broken-hearted.\\
\bigskip
Ah! what is not a dream by day\\
To him whose eyes are cast \\
On things around him with a ray \\
Turned back upon the past? \mypoint{b} \\
\myline[red](a)(b)
\end{document}
答案4
它不需要任何包,使用该命令可以从一点到一点\qbezier(a,b) ( (a+b)/2,(c+d)/2 ) (c,d)
画一条线。 一般用于画曲线,特别是如果第二个参数是第一个和第三个参数的中点,曲线就变成了直线,例如:(a,b)
(c,d)
\qbezier
\documentclass{article}
\begin{document}
%\setlength{\unitlength}{1mm}
\begin{picture}(100,100)
\qbezier(0,0)(40,40)(80,80) %A line from (0,0) to (80,80)
\qbezier(0,0)(10,6)(100,60) %2nd point doesn't have to be the midpoint.
{\linethickness{2pt}\qbezier(0,100)(1,99)(100,0) }%Just need to satisfy the linear equation
\end{picture}
\end{document}