内联 \usebox 垂直对齐

内联 \usebox 垂直对齐

由于我需要将逐字环境传递到命令中,因此我使用\savebox它并将其与其余文本一起内联呈现。

\documentclass{article}

\usepackage{listings}
\usepackage{enumitem}
\usepackage{mdframed}

\setlength{\textwidth}{500pt}
\setlength{\oddsidemargin}{-20pt}
\setlength{\evensidemargin}{-20pt}

% Define questions environment with framed \question
\newcommand{\questionlabel}{Question }
\newcommand{\restorequestionlabel}{\renewcommand{\questionlabel}{Question }}
\newcommand{\setquestionlabel}[1]{\renewcommand{\questionlabel}{#1 }}
\newlist{questions}{enumerate}{4}
\setlist[questions]{align=left,ref=\questionlabel\arabic*,label=\textbf{\questionlabel\arabic*.},wide}
\newcommand{\itembr}{\needspace{10\baselineskip}\item\mbox{}}
\newcommand{\question}[1]{\itembr\begin{mdframed}#1\end{mdframed}}

\begin{document}

\begin{questions}

\begin{lrbox}{0}
\begin{lstlisting}[language=C]
int* p = (int*) malloc(100 * sizeof(int));
\end{lstlisting}
\end{lrbox}
\question{
    Explain what \usebox{0} does.
}

\end{questions}

\end{document}

\question命令用于将文本放入mdframed。由于它是使用 声明的\newcommand,因此无法直接传入任何逐字环境。使用verbatimbox不是一个选项,因为我需要 的语法突出显示listings

问题是,生成的文本似乎是垂直对齐在顶部而不是底部:

不同的底线

我可以以某种方式自动对齐所有内容吗?我知道\raisebox存在,但我需要以某种方式了解高度差异。

答案1

我无法重现您的图像。但是,boxpos=t应该是您想要的:

\documentclass{article}

\usepackage{listings}

\lstset{boxpos=t}

\begin{document}

\begin{lrbox}{0}
\begin{lstlisting}[language=C]
int* p = (int*) malloc(100 * sizeof(int));
\end{lstlisting}
\end{lrbox}

Explain what \usebox{0}; does.

\begin{lrbox}{0}
\begin{lstlisting}[language=C]
SWAP(t, x, y)
\end{lstlisting}
\end{lrbox}

Define a macro SWAP\usebox{0} that exchanges two arguments of type t.

\end{document}

我添加了文本来强调输出的正确性。

在此处输入图片描述

另一方面,\lstinline似乎容易得多。

\documentclass{article}

\usepackage{listings}

\begin{document}

Explain what \lstinline[language=C]{int* p = (int*) malloc(100 * sizeof(int));}
does.

Define a macro \lstinline[language=C]{SWAP(t, x, y)}
that exchanges two arguments of type t.

\end{document}

在此处输入图片描述

相关内容