TikZ 中宽度可变的线(将手写 Xournal 文件转换为 tikz)

TikZ 中宽度可变的线(将手写 Xournal 文件转换为 tikz)

我正在尝试将手写文本或手绘草图转换为 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可以在环境中指定tikzpictureevery draw/.style={variable line width}。为了能够写入to[2pt],人们必须对.unknown密钥处理程序做一些有趣的事情(当您需要 Ryan Reich 时,他在哪里),这是可能的,但我想这些都是自动生成的,所以我猜可以输出类似上面的语法 - 如果不能,请说出来,我可以调整上面的内容以适应。

这是上面(原始版本)的输出:

宽度可变的 TikZ 线条

更新(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。

相关内容