如何绘制如图所示的 tikz 列表环境

如何绘制如图所示的 tikz 列表环境

我想创建一个 tikz 列表环境,如图所示。这样当 x、y、z 和 w 是分数或图形时,垂直空间是灵活的。

在此处输入图片描述

例子 在此处输入图片描述

在此处输入图片描述

答案1

作为Torbjørn T.评论中说矩阵最有可能是可行的方法(尤其是考虑到在“itemize”环境中要进行绘图)。但我认为以 itemize 的方式实现所谓的 itemize 会很好。话虽如此,我们需要一个兼容的\item,而且不幸的是,我的 LaTeX 技能不允许我处理分页系统,如果有人认为这是一个好主意,欢迎他们使用它 :)!

计数器可以按照旧的方式进行调整,标签图像由节点形状组成,该节点形状必须接收一个参数,即节点名称(用于随后绘制背景)。此外,可以使用设置标签图像和标签编号之间的分隔,使用设置label sep项目条目和标签编号之间的分隔numlabel sep。因为在matrix of nodes解析器遇到\path命令时,它不会将内容包装在中\node{ },然后我们可以像在 tikzpicture 上一样进行绘制,其中 CS 的原点是基线,也就是说,我们可以执行以下操作:

    \begin{myitemize}[%
        myitem label style={fill=black,yshift=.2mm},
        label background={draw, gray, line width=1.2em, shorten <=-2mm}]
        \item $\dfrac{1}{2}$\\
        \item \draw[scale=0.5] (4,-1.5) node[shift={(-20:-.5)}, centered]{$\theta$} -| coordinate[pos=.5](rect) node[pos=.25, below]{4} node[pos=.75,left](tmp){3} ++(-4,3) -- cycle;
              \draw (rect) rectangle node[circle, fill=black, inner sep=0pt, minimum size=1.5pt, centered]{} ++(.2,.2);\\
        \item Something else\\
    \end{myitemize}

要得到

当然,这还远远达不到正常的水平itemize,因为无法分页,也无法嵌套项目,圆圈对齐和标签枚举也存在一些问题,可以通过精细调整来克服,例如yshift。使用所有 TikZ 魔法,可以进行其他精细调整,例如shorten <在上面的示例中所做的那样。

最后,通过每行末尾的 实现垂直空间的灵活性\\,可以传递一个可选参数,即使用 来设置该行上各行之间的垂直空间,或者所有行之间的分隔row sep

完整的 MWE

\documentclass{standalone}
\usepackage{tikz,etoolbox,amsmath}
\usetikzlibrary{matrix,backgrounds}
\newcounter{myitem}
\renewcommand*{\themyitem}{\Alph{myitem}.}
\newcommand{\myitem}{%
    \ifnumequal{\value{myitem}}{1}%
    {|[myitem label=M-0]| \pgfmatrixnextcell[\myitemizelabelsep] \themyitem\stepcounter{myitem} \pgfmatrixnextcell[\myitemizenumlabelsep]}%
    {|[myitem label=M-1]| \pgfmatrixnextcell \themyitem\stepcounter{myitem} \pgfmatrixnextcell}%
}
\newenvironment{myitemize}[1][]{%
\setcounter{myitem}{1}
\let\item\myitem
\begin{tikzpicture}[
    myitem label/.style={circle, fill= white, minimum size=.5em, name=##1},
    myitem label style/.style={myitem label/.append style={##1}},
    label sep/.store in=\myitemizelabelsep, label sep=.5em,
    numlabel sep/.store in=\myitemizenumlabelsep, numlabel sep=.2em,
    label background/.style={label background style/.style={##1}}, label background={},
    row sep=.75em,
    #1]
\matrix[matrix of nodes, nodes={inner sep=0pt}, column 1/.style={anchor=south}, column 3/.style={anchor=base west}]\bgroup%
}{%
\\\egroup;
\scoped[on background layer]{
    \path[line cap=round, label background style] (M-0.center) -- (M-1.center);};
\end{tikzpicture}
\undef{\item}
}
\begin{document}
    \begin{myitemize}[%
        myitem label style={fill=black,yshift=.2mm},
        label background={draw, gray, line width=1.2em, shorten <=-2mm}]
        \item $\dfrac{1}{2}$\\
        \item \draw[scale=0.5] (4,-1.5) node[shift={(-20:-.5)}, centered]{$\theta$} -| coordinate[pos=.5](rect) node[pos=.25, below]{4} node[pos=.75,left](tmp){3} ++(-4,3) -- cycle;
              \draw (rect) rectangle node[circle, fill=black, inner sep=0pt, minimum size=1.5pt, centered]{} ++(.2,.2);\\
        \item Something else\\
    \end{myitemize}
\end{document}

现在想想,也许tabular更适合……

相关内容