将多项选择字母与 tikzpicture 顶部对齐

将多项选择字母与 tikzpicture 顶部对齐

我希望字母与图形顶部对齐。我不确定该怎么做。我认为选择环境与枚举环境类似,但我不确定如何修改它。

它看起来是这样的:

外观

这就是我的愿望:

我的愿望

\documentclass[%
12pt, 
a4paper,
]{exam}

\newlength{\figsize}
\setlength{\columnsep}{0pt}

\usepackage{tikz}
\usepackage{multicol}

\newcommand{\diagram}{
\begin{tikzpicture}
\draw[rounded corners]  (-2.0cm, 5cm) rectangle (5cm,-2.0cm);
\end{tikzpicture}
}

\begin{document}
    \begin{questions}
        \pointsinmargin\pointformat{}      
        
        \setlength{\figsize}{0.35\textwidth}

        \question[1]%
        Here is a question that fills up some lines.
        
        \begin{multicols}{2}
        \begin{choices}
            \choice \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
            \choice \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
            \choice \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
            \choice \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
        \end{choices}
        \end{multicols}
\end{questions}
\end{document}

ps 如果可以根据字母的列宽自动设置 \figsize A.,那就太好了,但是我在 multicol 文档中找不到任何包含列宽的内容。

答案1

您可以使用baseline键移动 的基线tikzpicture。您可以使用该键current bounding box来引用当前图片的大小。使用calc库,我们可以将该点向下移动 的高度,\strutbox以获得与字母相比不错的顶部对齐效果。

要自动设置,\figsize您可以将其存储M.在一个框内(M 很可能是字体中最宽的字母),然后将设置\figsize为当前线宽减去该框的宽度(使用\dimexpr这些东西是可能的)。

完整代码:

\documentclass[%
12pt, 
a4paper,
]{exam}

\newlength{\figsize}
\setlength{\columnsep}{0pt}

\usepackage{tikz}
\usepackage{multicol}

\usetikzlibrary{calc}

\makeatletter
\newcommand{\diagram}
  {%
    \setfigsize
    \begin{tikzpicture}[baseline={($(current bounding box.north)-(0,\ht\strutbox)$)}]
      \draw[rounded corners]  (0,0) rectangle (\figsize,\figsize);
    \end{tikzpicture}%
  }
\newcommand*\setfigsize
  {%
    \sbox0{M.}% M should be the widest letter
    \setlength\figsize{\dimexpr\linewidth-\wd0\relax}%
  }
\makeatother

\begin{document}
    \begin{questions}
        \pointsinmargin\pointformat{}      
        
        \setlength{\figsize}{0.35\textwidth}

        \question[1]%
        Here is a question that fills up some lines.
        
        \begin{multicols}{2}
        \begin{choices}
            \choice \begin{center}\diagram\end{center}
            \choice \begin{center}\diagram\end{center}
            \choice \begin{center}\diagram\end{center}
            \choice \begin{center}\diagram\end{center}
        \end{choices}
        \end{multicols}
\end{questions}
\end{document}

在此处输入图片描述

如果您想要将图像文件顶部对齐,则可以使用包\adjustimage中的adjustbox而不是\includegraphics(请注意,\adjustimage不使用可选参数,而是强制参数,它支持 的所有选项graphicx以及adjustbox特定选项)。如果您想要将任意内容顶部对齐(这也适用于tikzpicture),则可以使用\adjustbox{valign=t}{<stuff>}

例子:

\documentclass[%
12pt, 
a4paper,
]{exam}

\newlength{\figsize}
\setlength{\columnsep}{0pt}

\usepackage{adjustbox}
\usepackage{multicol}

\makeatletter
\newcommand{\diagram}
  {%
    \setfigsize
    \adjustimage{valign=t, width=\figsize}{example-image-duck}%
  }
\newcommand*\setfigsize
  {%
    \sbox0{M.}% M should be the widest letter
    \setlength\figsize{\dimexpr\linewidth-\wd0\relax}%
  }
\makeatother

\begin{document}
    \begin{questions}
        \pointsinmargin\pointformat{}      
        
        \setlength{\figsize}{0.35\textwidth}

        \question[1]%
        Here is a question that fills up some lines.
        
        \begin{multicols}{2}
        \begin{choices}
            \choice \begin{center}\diagram\end{center}
            \choice \begin{center}\diagram\end{center}
            \choice \begin{center}\diagram\end{center}
            \choice \begin{center}\diagram\end{center}
            \choice \begin{center}\adjustbox{valign=t}{\rule{10pt}{50pt}}\end{center}
        \end{choices}
        \end{multicols}
\end{questions}
\end{document}

结果:

在此处输入图片描述

答案2

解决方案\vspace{-\baselineskip}

\documentclass[%
12pt, 
a4paper,
]{exam}

\newlength{\figsize}
\setlength{\columnsep}{0pt}

\usepackage{tikz}
\usepackage{multicol}

\newcommand{\diagram}{
\begin{tikzpicture}
\draw[rounded corners]  (-2.0cm, 5cm) rectangle (5cm,-2.0cm);
\end{tikzpicture}
}

\begin{document}
    \begin{questions}
        \pointsinmargin\pointformat{}      
        
        \setlength{\figsize}{0.35\textwidth}

        \question[1]%
        Here is a question that fills up some lines.
        
        \begin{multicols}{2}
        \begin{choices}
            \choice \mbox{}\vspace{-\baselineskip}
            \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
            \choice \mbox{}\vspace{-\baselineskip}
            \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
            \choice \mbox{}\vspace{-\baselineskip}
            \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
            \choice \mbox{}\vspace{-\baselineskip}
            \begin{center}\resizebox{\figsize}{!}{\diagram}\end{center}
        \end{choices}
        \end{multicols}
\end{questions}
\end{document}

相关内容