我想知道是否有更好的方法通过 Tikz 在因式分解中进行交叉相乘来生成此图表。
我到目前为止已经这样做了,但箭头并不总是与线性因素对齐,所以我必须不断地调整它。
\begin{center}
\begin{tikzpicture}[scale=0.7]
\draw[<->] (-0.7,-1) -- (0.7,1);
\draw[<->] (-0.7,1) -- (0.7,-1);
\draw[color=black] (0.85,0) node[right] {$=adx+bcx\;$\textsf{(Middle Term)}};
\draw[color=black] (0.,1) node[above] {$(ax+b)$};
\draw[color=black] (0.,-1.) node[below] {$(cx+d)$};
\end{tikzpicture}
\end{center}
感谢您的帮助!
答案1
这是一种方法。当您的公式内容差异太大时,这种方法仍然需要手动调整。但是,出于以下几个原因,我建议采用这种方法。
standalone
在开发过程中使用起来更加方便:它可以根据需要调整“纸张大小”- 您不需要
Tikz
在主文档中包含代码,而是可以在主 via 包中显示已编译的 Tikz 图表(pdf)graphicx
,它仍然是矢量格式(无位图伪影) - 根据需要放置节点;根据需要选择样式,将它们放在开头
- 节点的参考边
(C)
将是west
,即 将(.7,0)
是 (反之亦然) - 正确的尖端位置确实取决于公式的垂直距离和
inner sep
左公式节点的距离 - 可视化该样式
lf
绘制节点形状;设置为draw=none
稍后 - 为了定位箭头,我使用极坐标表示法:
- 从节点中心开始,0 度为右侧,射线与节点形状的交点在哪里?这就是您想要的(估计)角度
因此,对于使用此方法进行的重大设计变更:
- 将所有
.7
值更改为您需要的值 - 调整极角
.215
、.30
和.145
.-30
对于更复杂(更自动化)的方法,请参阅您接受的解决方案和tikzmarks
。overlay
如果没有测试,箭头尖端可能会或可能不会指向 4 个因素中心
\documentclass[10pt,border=3mm,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
rf/.style={anchor=west},
lf/.style={inner sep=1pt,draw=gray!70},% later remove draw or seet draw=none
]
% ~~~ nodes with formulas ~~~~~~~~~~~~
\node[lf] (A) at ( 0, .7) {$(ax+b)$};
\node[lf] (B) at ( 0,-.7) {$(cx+d)$};
\node[rf] (C) at (.7,0) {$=adx+bcx\;$\textsf{(Middle Term)}};
% ~~~ crossing ~~~~~~~~~~~~~
\draw[<->] (A.215) -- (B.30);
\draw[<->] (B.145) -- (A.-30);
\end{tikzpicture}
\end{document}
附言
以下是您可以做的一些事情你的评论。
突出显示箭头
非常简单:
\draw[<->,red,thick] (B.145) -- (A.-30); % <<<
决定是否让这些选项成为本地选项(如图所示)或移至开头的样式部分(如rf
等)。标准可以是代码清理、泛化、重用、空间等。
临时救助网格
通常,对所需坐标有更好的了解是件好事。除了经验和良好的猜测帮助之外,网格还可以救命:
% ~~~ help grids: delete later or comment out ~~~~~~~~~~
\draw[blue!10,step=5mm] (0,0) grid (-1,1);
\draw[blue!10 ] (1,0) grid (4,-1);
Tikz 标准的椭圆
你只需画出它们,即:
- 路径以 开始
\
,以 结束;
- 在中间做一些动作(就像在电影场景中一样)
draw
,,red
在上述位置- 在那里画一个椭圆
- 使用风格
ell
...
ell/.style={x radius=1.3mm,y radius=2.5mm}, % <<<
...
\draw[red] ( .4, .72) ellipse [ell];
如果您希望对路径执行更多操作,请将节点放在最后一个位置,如下所示:
\draw[red] (-.4,-.72) ellipse [ell] node[yshift=-5mm]{\dbend};
这恰好是 Knuth 的警告标志之一,移至下方。它是常规的 Latex 文本,位于节点内{braces}
。您可以在以下位置找到字体符号和所需的包综合 LaTeX 符号列表。
使用形状库
它被描述在手册。
请记住,节点具有形状,默认情况下是矩形,而此库允许您更改所述(外部)形状。出于演示目的,我使用了菱形。
请记住,这些“符号”仍然是节点。因此,要更改其大小,请使用节点语句,例如等minimum width
。minimum size
但不能使用半径等。
是的,您可以在本地添加更多自定义样式,例如dashed
。
...
dmn/.style={shape=diamond,,minimum size=7mm,draw,purple},
...
\node[dmn,dashed] at (2.3,0) {};
增强代码
\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{shapes.geometric} % <<<
\usepackage{manfnt} % <<< Knuth's warning sign
\begin{document}
\begin{tikzpicture}[
rf/.style={anchor=west},
lf/.style={inner sep=1pt}, % <<<
% ~~~ standard Tikz ~~~~~~~~~~~~
ell/.style={x radius=1.3mm,y radius=2.5mm}, % <<<
% ~~~ using tikzlibrary ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dmn/.style={shape=diamond,,minimum size=7mm,draw,purple},
]
% ~~~ help grids: delete later or comment out ~~~~~~~~~~
\draw[blue!10,step=5mm] (0,0) grid (-1,1);
\draw[blue!10 ] (1,0) grid (4,-1);
% ~~~ nodes with formulas ~~~~~~~~~~~~
\node[lf] (A) at ( 0, .7) {$(ax+b)$};
\node[lf] (B) at ( 0,-.7) {$(cx+d)$};
\node[rf] (C) at (.7,0) {$=adx+bcx\;$\textsf{(Middle Term)}};
% ~~~ crossing ~~~~~~~~~~~~~
\draw[<->] (A.215) -- (B. 30);
\draw[<->,red,thick] (B.145) -- (A.-30); % <<<
% ~~~ some symbols ~~~~~~~~~~~~~~~~~~ % <<<
\draw[red] ( .4, .72) ellipse [ell];
\draw[red] (-.4,-.72) ellipse [ell] node[yshift=-5mm]{\dbend};
\node[dmn,dashed] at (2.3,0) {};
\end{tikzpicture}
\end{document}