我正在尝试排版用于我自己工作的符号,并且正在努力创建灵活的命令。该符号涉及将数学符号和表达式放置在三角形网格的顶点上,然后在方程中使用这些对象,从而产生如下图像:
到目前为止,我一直在摆弄tikzpicture
和精心调整节点位置,直到它看起来正确为止,但我想创建一些命令或包,使我能够选择结构(如twoOverThree
第四幅图所示),并输入参数({a}{b}{c}{d}{e}
无论它们是单个字母还是稍微复杂的表达式)。有什么建议吗?该tikzpicture
策略通常不起作用,因为根据参数,始终需要调整节点定位。
答案1
所有这些符号都可以用简单的复制arrays
,为什么需要TikZ
?
\documentclass{article}
\usepackage{amsmath,array}
\newcommand{\twooverthree}[5]{
\begin{array}{@{}c@{}c@{}c@{}c@{}c@{}}
&\\
#3&&
\end{array}}
\newcommand{\twooverone}[3]{
\begin{array}{@{}c@{}c@{}c@{}}
#1&\\

\end{array}}
\newcommand{\oneovertwo}[3]{
\begin{array}{@{}c@{}c@{}c@{}}
\\
#2&\\
\end{array}}
\newcommand{\oneone}[2]{
\begin{array}{@{}c@{}c@{}}
#1\\
\\
\end{array}}
\begin{document}
\[
\left(\oneone{a}{b}\right)\left(\oneone{d}{e}\right)
\]
\[
\alpha\left(\twooverone{a}{c}{b}\right) =
\oneovertwo{\alpha b}{\alpha c}{\alpha a}
\]
\[
\oneone{\oneone{a}{\overline{v}}}{\oneone{\overline{w}}{f}}
\]
\[
\twooverthree{a}{b}{c}{d}{e}
\]
\end{document}
答案2
这是我尝试为您的自定义符号提供的优雅解决方案。此解决方案不需要任何软件包(amsmath
仅包含在\bar{}
示例方程式中的命令示例中)。
\documentclass{article}
\usepackage{amsmath}
\newcommand\slantstack[2]{%
\raisebox{1.25ex}{$#1$}%
\raisebox{-1.25ex}{$#2$}}
\newcommand\tristack[3]{%
\raisebox{-1.25ex}{$#1$}\kern.5ex%
\raisebox{1.25ex}{$#2$}%
\raisebox{-1.25ex}{$#3$}}
\newcommand\invtristack[3]{%
\raisebox{1.25ex}{$#1$}%
\kern.5ex\raisebox{-1.25ex}{$#2$}%
\kern.5ex\raisebox{1.25ex}{$#3$}}
\newcommand\quadstack[4]{%
\raisebox{4.25ex}{$#1$}%
\kern-.5ex\raisebox{1.25ex}{$#2$}%
\kern-.5ex\raisebox{-1.25ex}{$#3$}%
\kern-.5ex\raisebox{-4.25ex}{$#4$}}
\newcommand\twooverthree[5]{%
\raisebox{-1.25ex}{#1}%
\raisebox{1.25ex}{#2}%
\raisebox{-1.25ex}{#3}%
\raisebox{1.25ex}{#4}%
\raisebox{-1.25ex}{#5}}
\begin{document}
\begin{center}
\begin{tabular}{ccccc}
\multicolumn{5}{l}{Five basic commands:}\\\hline\\
\texttt{\textbackslash slantstack}&
\texttt{\textbackslash tristack}&
\texttt{\textbackslash invtristack}&
\texttt{\textbackslash quadstack}&
\texttt{\textbackslash twooverthree}\\
\slantstack{a}{b}&
\tristack{a}{b}{c}&
\invtristack{a}{b}{c}&
\quadstack{a}{b}{c}{d}&
\twooverthree{a}{b}{c}{d}{e}\\\\
\multicolumn{5}{l}{Identical function in and out of math mode:}\\\hline\\
$\slantstack{a}{b}$&
$\tristack{a}{b}{c}$&
$\invtristack{a}{b}{c}$&
$\quadstack{a}{b}{c}{d}$&
$\twooverthree{a}{b}{c}{d}{e}$\\\\
\multicolumn{5}{l}{Works properly with \texttt{\textbackslash left} \& \texttt{\textbackslash right} commands:}\\\hline\\
$\left(\slantstack{a}{b}\right)$&
$\left(\tristack{a}{b}{c}\right)$&
$\left(\invtristack{a}{b}{c}\right)$&
$\left(\quadstack{a}{b}{c}{d}\right)$&
$\left(\twooverthree{a}{b}{c}{d}{e}\right)$\\\\
\multicolumn{5}{l}{Your equations:}\\\hline\\
\multicolumn{5}{c}{$\left(\slantstack{a}{b}\right)\left(\slantstack{d}{e}\right)$
\hfill $\alpha\left(\invtristack{a}{b}{c}\right) = \tristack{\alpha c}{\alpha b}{\alpha a}$
\hfill \quadstack{a}{\bar{v}}{\bar{w}}{\text{f}}
\hfill \twooverthree{a}{b}{c}{d}{e}}
\end{tabular}
\end{center}
\end{document}
此答案仅使用基本\raisebox
和\kern
命令,因此它适用于我想到的每个用例,并且与周围的文本和方程式对齐和留白。它还应该可以完美地适用于不同的字体大小。
答案3
为了:
- 这可以使用以下解决方案来完成这个答案。您需要将线设为白色。
- 您可以在这里使用矩阵或设置一个
\newcommand
(我正在研究它)。 这可以通过 foreach 完成,只有两行代码(我不认识上面那行的字母,但你明白了):
\documentclass[margin=10pt]{standalone} \usepackage{tikz} \begin{document} \begin{tikzpicture}[x=2mm, y=5mm] \foreach \y/\letter [count=\x from 0] in {5/a,4/$v$,3/$w$,2/f}{ \node at (\x,\y) {\letter}; } \end{tikzpicture} \end{document}
与第 3 点相同,可以在 foreach 中完成(可能比我做的更简单):
\documentclass[margin=10pt]{standalone} \usepackage{tikz} \foreach \y/\letter [count=\x from 0] in {0/a,1/b,0/c,1/d,0/e}{ \node at (\x,\y) {\letter}; } \end{tikzpicture} \end{document}
答案4
使用宏设置这些很简单stackengine
(原始答案),使用软件包设置甚至更容易tabstackengine
(修订答案)。但是,我觉得我没有足够的信息来设置宏快捷方式,因为我不知道所需语法的全部范围。
由于您的许多数据项都是直立(非数学)字体,因此我将默认设置设为直立。如果您的符号中的项通常是数学项,则只需\stackMath
在序言中发出,堆栈就会假定参数是数学模式。
修改后的答案
\documentclass{article}
\usepackage{tabstackengine}
\def\stacktype{L}\setstackgap{L}{.8\baselineskip}
\begin{document}
\[
\Bigl( \tabbedstackanchor{a&}{&b}\Bigr)
\Bigl( \tabbedCenterstack{d&\\&e}\Bigr)
\]
\[
\alpha\Bigl( \tabbedstackanchor{a&&c}{&b&} \Bigr) =
\tabbedstackanchor{&$\alpha$b&}{$\alpha$c&&$\alpha$a}
\]
\[
\tabbedCenterstack{a&&&\\&$\bar v$&&\\&&$\bar w$&\\&&&f} = 0
\]
\[
\tabbedstackanchor{&b&&d&}{a&&c&&e}
\]
\end{document}
原始答案(stackengine
)
在下面的 MWE 中,我展示了获取结果的各种方法。
\documentclass{article}
\usepackage[usestackEOL]{stackengine}
\def\stacktype{L}\setstackgap{L}{.8\baselineskip}
\begin{document}
\[
\Bigl( \stackanchor{a~~}{~~b}\Bigr)
\Bigl( \Centerstack{d~~\\~~e}\Bigr)
\]
\[
\alpha\Bigl( \stackanchor{a~~c}{b} \Bigr) =
\stackanchor{$\alpha$b}{$\alpha$c~~~$\alpha$a}
\]
\[
\makebox[7ex]{%
\tllap[.5\dimexpr\Lstackgap\relax]{\tllap{a}$\bar v$}\brlap[.5\dimexpr\Lstackgap\relax]{$\bar w$\brlap{f}}
} = 0
\]
\[
\stackanchor{b~~d}{a~~c~~e}
\]
\end{document}