我正在尝试将手写文本或手绘草图转换为 TikZ。通常,笔触的粗细会随着书写者对表面施加的压力大小而变化。
我正在寻找短的将其映射到 TikZ 的方法,例如这种语法非常棒:
\draw (1,1) --[2pt] (1,3) --[1pt] (2,3);
从 (1,1) 到 (1,3) 绘制一条 2pt 直线,从 (1,3) 到 (2,3) 绘制一条 1pt 直线。
我知道这一点:
\draw[line width=2pt] (1,1) -- (1,3);
\draw[line width=2pt] (1,1) -- (1,3);
可以工作,但是对于大量的坐标来说它不太实用。
更新:
感谢 Andrew Staceys 的回答,我得以完成该工具,该工具可将手绘的 Xournal 草图转换为 TikZ 代码。
如果您发现它对您的目的有用,您可以在以下位置下载该工具https://github.com/flyser/xoj2tikz并阅读公告在这里。
玩得开心 :-)
答案1
这是我第一次尝试使用to
路径。这个想法是使用to
将路径分成几段并分别渲染每段,并设置每段的线宽。这样做的问题是(我看不出有什么办法可以解决这个问题,但如果线宽变化不大,并且线段之间的线角变化不大,那么问题可能并不大)路径被分成几段,这意味着它们不能整齐地连接在一起。
\documentclass{standalone}
%\url{http://tex.stackexchange.com/a/43418/86}
\usepackage{tikz}
\tikzset{
variable line width/.style={
every variable line width/.append style={#1},
to path={%
\pgfextra{%
\draw[every variable line width/.try,line width=\pgfkeysvalueof{/tikz/thickness}] (\tikztostart) -- (\tikztotarget);
}%
(\tikztotarget)
},
},
thickness/.initial=0.6pt,
every variable line width/.style={line cap=round, line join=round},
}
\begin{document}
\begin{tikzpicture}
\draw[variable line width={blue}] (1,1) to[thickness=1cm] (1,3) to[thickness=.5cm] (2,3);
\end{tikzpicture}
\end{document}
密钥variable line width
可以在环境中指定tikzpicture
为every draw/.style={variable line width}
。为了能够写入to[2pt]
,人们必须对.unknown
密钥处理程序做一些有趣的事情(当您需要 Ryan Reich 时,他在哪里),这是可能的,但我想这些都是自动生成的,所以我猜可以输出类似上面的语法 - 如果不能,请说出来,我可以调整上面的内容以适应。
这是上面(原始版本)的输出:
更新(2012-02-07):添加了一个every variable line width
样式,该样式会添加到每个内部路径。任何指定为键参数的内容variable line width
都会在该路径的持续时间内附加到此。
答案2
TikZ 支持\foreach
循环,当根据特定模式创建线条时,这可能会有所帮助。请参阅这里,第 504 页,了解更多信息。
此外,\tikzset
它可以为您节省一些输入。它允许您定义自己的样式以在 中使用\draw [mystyle]
。
\tikzset{lw/.style = {line width=2pt}}
\draw [lw] (1,1) -- (2,2);
但如果真的需要“手绘”草图,那么最好使用矢量图形程序,例如 Inkscape。