我的代码
\documentclass[a4paper,12pt,twoside]{article}
\usepackage[english]{babel}
\usepackage{amssymb}
\usepackage{amsmath}
\newcommand{\QUE}[1]{%
{\bf Question\# 1 }: #1
}%end QUE
\raggedbottom
\begin{document}
\section{Algorithms and data structures}
\QUE{Given the following C function definition:
\begin{verbatim}
int foo(int a, int b){
if (a == b)
return a;
else
return (a>b) ? foo(a-b, b) : foo(a, b-a);
}
\end{verbatim}
What is the result of the computation of \texttt{foo(24, 16)}?
}
\smallskip\hrule\smallskip
\end{document}
生成:
[...]
Runaway argument?
int foo(int a, int b){ if (a == b) return a; else return (a>b) ? foo\ETC.
! File ended while scanning use of \@xverbatim.
<inserted text>
\par
l.74 \input{Q0201}
etc.
如果我注释掉\begin{verbatim}...\end{verbatim}
代码,代码就会运行。其他的也存在同样的问题,\begin{something}...\end{something}
有什么提示吗?
答案1
从https://texfaq.org/FAQ-verbwithin
LaTeX verbatim 命令通过更改类别代码来工作。Knuth 谈到这种事情时说“需要小心把握时机……”,因为一旦将类别代码分配给字符,它就不会改变。因此 \verb 和 \begin{verbatim} 必须假设它们首先查看参数文本;如果不是,则 TeX 已经分配了类别代码,因此 verbatim 命令没有机会。例如:
\verb+\error+
可以工作(排版' \error
'),但是
\newcommand{\unbrace}[1]{#1}
\unbrace{\verb+\error+}
不会(它将尝试执行\error
)。可能遇到的其他错误是“\verb 结束于行尾”,或者甚至更有帮助的“\verb
命令参数非法”。同样的事情发生在\begin{verbatim}
…… \end{verbatim}
:
\ifthenelse{\boolean{foo}}{%`
\begin{verbatim}
foobar
\end{verbatim}
}{%
\begin{verbatim}
barfoo
\end{verbatim}
}
引发诸如‘扫描使用时文件结束\@xverbatim
’之类的错误,因为\begin{verbatim}
无法看到其匹配\end{verbatim}
。
这就是为什么 LaTeX 手册坚持逐字命令不得出现在任何其他命令的参数中;它们不仅脆弱,而且在任何“正常”命令参数中都完全无法使用,无论 \protection 如何。(\verb 命令会尽力检测您是否误用了它;不幸的是,它不能总是这样做,因此错误消息不能可靠地指示问题。)
因此,您要问自己的第一个问题是:“\verb
真的有必要吗?”
If `\texttt{your text}` produces the same result as `\verb+your text+`,
那么就不需要\verb in
第一个了。如果您使用\verb
来排版 URL 或电子邮件地址等,那么包\url
中的命令url
会有所帮助:它不会遭受 的所有问题\verb
,尽管它仍然不够强大。如果您将其放入\verb
装箱命令的参数中(例如
\fbox)
,请考虑使用lrbox
环境:
`\newsavebox{\mybox}`
...
`\begin{lrbox}{\mybox}`
`\verb!VerbatimStuff!`
`\end{lrbox}`
`\fbox{\usebox{\mybox}}`
[等等。更多信息请见顶部的网页]
答案2
\# 1
我对代码中的有很大的怀疑,也许你想要在之前有一些空间,也许1
应该是一些计数器的值,无论如何,你可以\QUE
通过以下方式拯救命令:(正如在浪费空间的答案,不能将逐字逐句地放在将作为命令参数的内容中,因此这里的技巧是\QUE
没有参数)
\documentclass[a4paper,12pt,twoside]{article}
\usepackage[english]{babel}
\usepackage{amssymb}
\usepackage{amsmath}
% \newcommand{\QUE}[1]{%
% {\bf Question\# 1 }: #1
% }%end QUE
\newcommand{\QUE}{\textbf {Question\# 1}: \bgroup\let\next=}%
\raggedbottom
\begin{document}\thispagestyle{empty}
\section{Algorithms and data structures}
\QUE{Given the following C function definition:
\begin{verbatim}
int foo(int a, int b){
if (a == b)
return a;
else
return (a>b) ? foo(a-b, b) : foo(a, b-a);
}
\end{verbatim}
What is the result of the computation of \texttt{foo(24, 16)}?
}
\smallskip\hrule\smallskip
\end{document}