创建命令来将字母置于不同的形状中

创建命令来将字母置于不同的形状中

我是一名数学老师,目前正在为课程编写练习库。我为此使用 LaTeX,我想用练习字母周围的特定形状来表示练习的难度。下图说明了我的想法:

在此处输入图片描述

我是 Tikz 新手。我可以设法创建形状(也许除了最后一个形状,即一个正方形和上面的菱形),但我很难在其中放置可见文本。我希望能够创建新的命令\easy{}\medium{}\hard{}\vhard{}其中我只需插入字母(例如\easy{a})即可获得所需的结果。

有人能提出一个解决我问题的通用结构吗?我并不是要求他们为我做所有事情,但也许可以让我了解一下 LaTeX 代码的结构,因为我刚开始使用 Tikz。

多谢!

答案1

也许像这样?我用 定义了一个新的列表环境(称为problemsenumitem。然后我定义了命令\easy\medium和 ,\hard它们\vhard的行为基本上应该像\item,但它们在项目的标签周围添加了一个框。

\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\newlist{problems}{enumerate}{1}
\setlist[problems]{
    label=\alph*,
}
\newcommand*{\easybox}[1]{%
    \begin{tikzpicture}[anchor=base, baseline]
        \node[circle, fill=black, text=white, font=\bfseries, inner sep=2pt] at (0,0) {#1};
    \end{tikzpicture}%
}
\newcommand*{\mediumbox}[1]{%
    \begin{tikzpicture}[anchor=base, baseline]
        \node[fill=black, text=white, font=\bfseries, inner sep=3pt] at (0,0) {#1};
    \end{tikzpicture}%
}
\newcommand*{\hardbox}[1]{%
    \begin{tikzpicture}[anchor=base, baseline]
        \node[diamond, fill=black, text=white, font=\bfseries, inner sep=1.5pt] at (0,0) {#1};
    \end{tikzpicture}%
}
\newcommand*{\vhardbox}[1]{%
    \begin{tikzpicture}[anchor=base, baseline]
        \node[fill=black, font=\bfseries, inner sep=3pt] at (0,0) {\phantom{#1}};
        \node[diamond, fill=black, text=white, font=\bfseries, inner sep=1.5pt] at (0,0) {#1};
    \end{tikzpicture}%
}
\newcommand*{\makeproblemcommand}[1]{%
    \expandafter\NewDocumentCommand\expandafter{\csname #1\endcsname}{o}{%
        \IfNoValueTF{##1}{%
            \refstepcounter{problemsi}
            \item[\csname #1box\endcsname{\theproblemsi}]
        }{%
            \item[\csname #1box\endcsname{##1}]
        }%
    }%
}
\makeproblemcommand{easy}
\makeproblemcommand{medium}
\makeproblemcommand{hard}
\makeproblemcommand{vhard}
\begin{document}
\begin{problems}
    \easy An easy problem
    \medium A problem
    \hard A challenging problem
    \vhard A very challenging problem
    \easy Another easy problem
    \hard Another hard problem
    \vhard[X] A problem with a different label
\end{problems}
\end{document}

相关内容