因此,我一直在 tikz 的帮助下定义一些新符号。我的目标是能够将这些符号放入表中,例如:
但是,这些表格必须被理解为某种字符串图,所以我希望符号能够相互匹配(例如,在左表中,两个符号的垂直线应该彼此相对)。有什么好方法可以做到这一点吗?
以下是生成上一张图片的代码:
\documentclass[preview,border=10pt]{standalone}
\usepackage{tikz}
\newcommand{\cornerur}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (0,0) -- (0,2ex);%
\draw[line width=.4mm] (0,0) -- (2ex,0);%
\end{tikzpicture}%
}
\newcommand{\cornerul}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (2ex,2ex) -- (2ex,0);%
\draw[line width=.4mm] (0,0) -- (2ex,0);%
\end{tikzpicture}%
}
\newcommand{\cornerdr}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (0,0) -- (0,2ex);%
\draw[line width=.4mm] (2ex,2ex) -- (0,2ex);%
\end{tikzpicture}%
}
\newcommand{\cornerdl}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (0,2ex) -- (2ex,2ex);%
\draw[line width=.4mm] (2ex,0) -- (2ex,2ex);%
\end{tikzpicture}%
}
\newcommand{\horiz}{%
\begin{tikzpicture}%
\node at (0,0) {}; {}%
\draw[line width=.4mm] (0,.5ex) -- (2ex,.5ex);%
\end{tikzpicture}%
}
\newcommand{\vertic}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (.5ex,0) -- (.5ex,2ex);%
\end{tikzpicture}%
}
\begin{document}
\[
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
\hline
$\cornerdr$ & $ \horiz $\\
\hline
$\vertic$ & $\cornerdr$ \\
\hline
\end{tabular}
\qquad
\begin{tabular}{ | c | }
\hline
$\cornerdr$ \\
\hline
$ \cornerul $\\
\hline
\end{tabular}
\]
\end{document}
答案1
tikz 图片的问题在于,一旦图片完成,它就会被剪裁到其边界框,因此像 这样的单线图形\draw (0,0) -- (1,1);
会产生与像 这样的单线图形相同的结果\draw (1,1) -- (2,2);
。第二个看起来没有“位移”。
为了正确定位每个单元格内的线条,您需要每个 tikzpicture 具有相同的大小,这意味着相同的边界框。例如,如果定义了以下宏:
\def\bbox{\path[fill=yellow, use as bounding box] (0,0) rectangle(2ex,2ex);}
并且每个 tikz 图片都以 命令 开头\bbox
,然后您的代码会生成以下图形:
您仍然可以看到线条没有按您想要的方式对齐,但这是因为这些线条不是从 开始(0,0)
,而是从(.5ex, 0)
或(0, .5ex)
开始。我不知道这是否是故意的,但无论如何,黄色背景可以更容易地看到“原因”并根据需要调整结果。
对结果满意后,您可以删除fill=yellow
定义中的选项\bbox
。黄色框将消失,但对齐仍然存在,因为使用了相同的边界框:
这是完整的代码。我对其进行了少许修改,以便在连接处产生正确的角,并删除了表格周围的\[
。\]
\documentclass[preview,border=10pt]{standalone}
\usepackage{tikz}
\def\bbox{\path[use as bounding box] (0,0) rectangle(2ex,2ex);}
\newcommand{\cornerur}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (2ex,0) -- (0,0) -- (0,2ex);%
\end{tikzpicture}%
}
\newcommand{\cornerul}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (2ex,2ex) -- (2ex,0) -- (0,0);%
\end{tikzpicture}%
}
\newcommand{\cornerdr}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (2ex,2ex) -- (0,2ex) -- (0,0);%
\end{tikzpicture}%
}
\newcommand{\cornerdl}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (0,2ex) -- (2ex,2ex) -- (2ex,0);%
\end{tikzpicture}%
}
\newcommand{\horiz}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (0,.5ex) -- (2ex,.5ex);%
\end{tikzpicture}%
}
\newcommand{\vertic}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (.5ex,0) -- (.5ex,2ex);%
\end{tikzpicture}%
}
\begin{document}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
\hline
$\cornerdr$ & $ \horiz $\\
\hline
$\vertic$ & $\cornerdr$ \\
\hline
\end{tabular}
\qquad
\begin{tabular}{ | c | }
\hline
$\cornerdr$ \\
\hline
$ \cornerul $\\
\hline
\end{tabular}
\end{document}
答案2
我不太清楚命名惯例,但这是我对它们的解释。如果您愿意,可以更改名称。
不需要 TikZ:picture
同样很好,甚至更简单。
\documentclass{article}
\usepackage{pict2e}
\linethickness{1pt}
\roundcap\roundjoin
\newcommand{\cornerur}{%
\begingroup\setlength{\unitlength}{2ex}% current font
\begin{picture}(1,1)
\roundcap
\polyline(1,0)(1,1)(0,1)
\end{picture}%
\endgroup
}
\newcommand{\cornerul}{%
\begingroup\setlength{\unitlength}{2ex}% current font
\begin{picture}(1,1)
\polyline(0,0)(0,1)(1,1)
\end{picture}%
\endgroup
}
\newcommand{\cornerdr}{%
\begingroup\setlength{\unitlength}{2ex}% current font
\begin{picture}(1,1)
\polyline(0,0)(1,0)(1,1)
\end{picture}%
\endgroup
}
\newcommand{\cornerdl}{%
\begingroup\setlength{\unitlength}{2ex}% current font
\begin{picture}(1,1)
\polyline(0,1)(0,0)(1,0)
\end{picture}%
\endgroup
}
\newcommand{\horiz}{%
\begingroup\setlength{\unitlength}{2ex}% current font
\begin{picture}(1,1)
\polyline(0,1)(1,1)
\end{picture}%
\endgroup
}
\newcommand{\vertic}{%
\begingroup\setlength{\unitlength}{2ex}% current font
\begin{picture}(1,1)
\polyline(0,0)(0,1)
\end{picture}%
\endgroup
}
\begin{document}
\begin{center}
\verb|\cornerur|: \cornerur\\
\verb|\cornerul|: \cornerul\\
\verb|\cornerdr|: \cornerdr\\
\verb|\cornerdl|: \cornerdl
\end{center}
\[
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
\hline
\cornerdr & \horiz \\
\hline
\vertic & \cornerdr \\
\hline
\end{tabular}
\qquad
\begin{tabular}{ | c | }
\hline
\cornerdr \\
\hline
\cornerul \\
\hline
\end{tabular}
\]
\end{document}
具有两个水平符号和两个垂直符号的变体。高度根据当前字体的大写字母高度量身定制。字形很好地连接在一起。如果您想要一些侧边距,可以轻松添加它们。
\documentclass{article}
\usepackage{pict2e}
\newcommand{\skysurf}[1]{%
\begingroup
\setlength{\unitlength}{\fontcharht\font`A}%
\linethickness{1pt}\roundcap\roundjoin
\begin{picture}(1,1)
\polyline#1
\end{picture}%
\endgroup
}
\newcommand{\cornerur}{\skysurf{(1,0)(1,1)(0,1)}}
\newcommand{\cornerul}{\skysurf{(0,0)(0,1)(1,1)}}
\newcommand{\cornerdr}{\skysurf{(0,0)(1,0)(1,1)}}
\newcommand{\cornerdl}{\skysurf{(0,1)(0,0)(1,0)}}
\newcommand{\horizd} {\skysurf{(0,0)(1,0)}}
\newcommand{\horizu} {\skysurf{(0,1)(1,1)}}
\newcommand{\verticl} {\skysurf{(0,0)(0,1)}}
\newcommand{\verticr} {\skysurf{(1,0)(1,1)}}
\begin{document}
\begin{tabular}{ccc}
\cornerul & \horizu & \cornerur\\
\verticl & & \verticr \\
\cornerdl & \horizd & \cornerdr\\
\end{tabular}
\bigskip
ABC \cornerul \horizu \cornerur \verticl \verticr \cornerdl \horizd \cornerdr
\bigskip
\begingroup\setlength{\tabcolsep}{0pt}\renewcommand{\arraystretch}{0}
\begin{tabular}{ccc}
\cornerul & \horizu & \cornerur\\
\verticl & & \verticr \\
\cornerdl & \horizd & \cornerdr\\
\end{tabular}
\endgroup
\end{document}
答案3
根据您的代码,我尝试做了一些类似的事情。由于打字懒惰,我缩短了您的命令名称。我还引入了两条新的垂直或水平线。两者都在白色背景上有一条白线,因此往往不可见,但使用了所需的空间。变体的不同之处在于可见线在升左转或r垂直对齐的右侧或位于吨操作或b水平定线的底端。
话虽如此,您现在能够将几乎任何组合与对齐进行放置(我希望)。
啊,懒得打字,我也定义了 TikZ 风格并使用了它们。
如您所见,您不需要数学模式。
\documentclass[preview,border=10pt]{standalone}
\usepackage{tikz}
\tikzset{my style/.style={line width=.4mm}, blind/.style={white}}
\newcommand{\ur}{%
\begin{tikzpicture}%
\draw[my style] (2ex,0) -- (0,0) -- (0,2ex);%
\end{tikzpicture}%
}
\newcommand{\ul}{%
\begin{tikzpicture}%
\draw[my style] (2ex,2ex) -- (2ex,0) -- (0,0);%
\end{tikzpicture}%
}
\newcommand{\dr}{%
\begin{tikzpicture}%
\draw[my style] (0,0) -- (0,2ex) -- (2ex,2ex);%
\end{tikzpicture}%
}
\newcommand{\dl}{%
\begin{tikzpicture}%
\draw[my style] (0,2ex) -- (2ex,2ex) -- (2ex,0);%
\end{tikzpicture}%
}
\newcommand{\hb}{%
\begin{tikzpicture}%
\draw[my style] (0,0) -- (2ex,0);%
\draw[blind] (0,0) -- (0,2ex);%
\end{tikzpicture}%
}
\newcommand{\hh}{%
\begin{tikzpicture}%
\draw[my style] (0,2ex) -- (2ex,2ex);%
\draw[blind] (0,0) -- (0,2ex);%
\end{tikzpicture}%
}
\newcommand{\vl}{%
\begin{tikzpicture}%
\draw[my style] (0,0) -- (0,2ex);%
\draw[blind] (0,0) -- (2ex,0);%
\end{tikzpicture}%
}
\newcommand{\vr}{%
\begin{tikzpicture}%
\draw[my style] (2ex,0) -- (2ex,2ex);%
\draw[blind] (0,0) -- (2ex,0);%
\end{tikzpicture}%
}
\begin{document}
Using \verb!\fbox!-commands:
\fbox{\ur}\fbox{\hb}
This is the old style, without math mode.
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
\hline
\dr & \hh \\
\hline
\vl & \dr \\
\hline
\end{tabular}
\quad
\begin{tabular}{ | c |c | c |}
\hline
\dr & \hh & \dl\\
\hline
\vl & & \vr \\
\hline
\ur & \hb & \ul\\
\hline
\end{tabular}
\end{document}
为了证明它有效:
答案4
\rule
这里我通过将白色叠加在黑色上来创建元素\rule
,并根据需要进行偏移。元素当前已定义\rlthk
厚度和\boxsize
大小。宏的形式为\X<horz><vert>
,其中<horz
可以是l
、c
或r
,并且<vert>
可以是b
、c
或t
。
\documentclass[12pt]{article}
\usepackage{stackengine,xcolor}
\def\rlthk{\dimexpr1pt\relax}
\def\boxsize{\dimexpr1ex\relax}
\def\blbox{\rule{\boxsize}{\boxsize}}
\def\whbox{\textcolor{white}{\blbox}}
%
\def\Xrt{\kern-\rlthk\stackinset{r}{\rlthk}{t}{\rlthk}{\whbox}{\blbox}}
\def\Xlt{\stackinset{l}{\rlthk}{t}{\rlthk}{\whbox}{\blbox}\kern-\rlthk}
\def\Xrb{\kern-\rlthk\stackinset{r}{\rlthk}{b}{\rlthk}{\whbox}{\blbox}}
\def\Xlb{\stackinset{l}{\rlthk}{b}{\rlthk}{\whbox}{\blbox}\kern-\rlthk}
%
\def\Xtt{\stackinset{c}{}{t}{\rlthk}{\whbox}{\blbox}}
\def\Xll{\stackinset{l}{\rlthk}{c}{}{\whbox}{\blbox}\kern-\rlthk}
\def\Xbb{\stackinset{c}{}{b}{\rlthk}{\whbox}{\blbox}}
\def\Xrr{\kern-\rlthk\stackinset{r}{\rlthk}{c}{}{\whbox}{\blbox}}
\begin{document}
Building blocks:\par
\Xlt{} \Xtt{} \Xrt\par
\Xll{} \hspace{\boxsize} \Xrr\par
\Xlb{} \Xbb{} \Xrb
\begin{tabular}{|c|c|}
\hline
\Xlt & \Xtt\\
\hline
\Xll & \Xlt\\
\hline
\end{tabular}
\quad%
\begin{tabular}{|c|}
\hline
\Xlt \\
\hline
\Xrb\\
\hline
\end{tabular}
\end{document}