我正在寻找一种用框架包裹某些东西的方法。我尝试了不同的方法,但最终选择使用fancybox
包装和minipage
(因为我需要控制框架的宽度)。它对于纯文本内容非常有效
\usepackage{fancybox}
\begin{document}
\fbox{%
\begin{minipage}{\textwidth}
\textbf{Why we use negative angle in above calculate?}\newline
Since .... we have to ....
\end{minipage}
}
\end{document}
但是,如果我们添加任何环境,如lstlisting
或verbatim
,它就不起作用
\fbox{%
\begin{minipage}{\textwidth}
\textbf{Why we use negative angle in above calculate?}\newline
Since .... we have to ....
\begin{lstlisting}
A = x+y;
B = x^2-2y;
\end{lstlisting}
\end{minipage}
}
有没有什么方法可以让它发挥作用?
ps 我创建了一个网页,供用户在其中输入乳胶内容,无论他们输入什么,我都会用框架框将其包裹起来,并用 pdflatex 生成一个 pdf。我无法控制他们输入的内容,他们可能会输入文本、数学、环境和/或混合所有这些。那么有没有更好的方法来框住里面的乳胶内容?
答案1
这是因为listings
(包括verbatim
内容)不能作为参数传递给其他函数/宏(无需担心)。不过先将内容装箱是可以的:
\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\newsavebox{\codebox}% For saving code
\begin{document}
\begin{lrbox}{\codebox}
\begin{lstlisting}
A = x+y;
B = x^2-2y;
\end{lstlisting}
\end{lrbox}
\noindent
\fbox{%
\begin{minipage}{\dimexpr\linewidth-2\fboxsep-2\fboxrule}
\textbf{Why we use negative angle in above calculate?}\newline
Since .... we have to .... \par
\usebox{\codebox}
\end{minipage}%
}
\end{document}
lrbox
是一个采用一个强制(box)参数的环境,它将使用该参数来存储内容。我已将其称为\codebox
。请执行以下操作外部然后\fbox
使用\usebox{\codebox}
里面 \fbox
的論點。
\noindent
注意偶尔使用%
(见%
行末百分号 ( ) 有什么用?) 和 a\dimexpr
作为minipage
尺寸,以避免出现过满\hbox
警告。
如果你无法控制用户插入的内容,并且他们可以混合/匹配内容,那么你最好使用装箱一切并只对\fbox
输出进行 -ing:
\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\newsavebox{\userinput}% For saving user input
\begin{document}
\begin{lrbox}{\userinput}
\begin{minipage}{\dimexpr\linewidth-2\fboxsep-2\fboxrule}
\textbf{Why we use negative angle in above calculate?}\newline
Since .... we have to ....
\begin{lstlisting}
A = x+y;
B = x^2-2y;
\end{lstlisting}
\end{minipage}
\end{lrbox}
\noindent
\fbox{\usebox{\userinput}}%
\end{document}
当然,mdframed
对这种事情没有任何问题,并且可能是一个更好的选择;它还允许跨页面边界进行框架中断:
\documentclass{article}
\usepackage{listings,mdframed}% http://ctan.org/pkg/{listings,mdframed}
\begin{document}
\begin{mdframed}
\textbf{Why we use negative angle in above calculate?}\newline
Since .... we have to ....
\begin{lstlisting}
A = x+y;
B = x^2-2y;
\end{lstlisting}
\end{mdframed}
\end{document}
查看mdframed
文档了解有关如何使事物变得奇特的更多细节。
答案2
这listings
软件包提供了用于框架环境的内置选项listings
,例如全局使用
\lstset{frame=single}
或者在本地使用(例如)
\begin{lstlisting}[frame=single]
完整的 MWE 如下
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{frame=single}
\begin{document}
\begin{lstlisting}[frame=single]
A = x+y;
B = x^2-2y;
\end{lstlisting}
\begin{lstlisting}[backgroundcolor=\color{yellow!20}]
A = x+y;
B = x^2-2y;
\end{lstlisting}
\end{document}
答案3
接受 Verbatim 内容的使用和环境如下调整框
\usepackage{adjustbox}
...
\begin{adjustbox}{minipage=[t][0.5\textheight]{1\textwidth},fbox}
...
\begin{lstlisting}[language=..., ...]
your code
\end{lstlisting}
...
\end{adjustbox}
或者你可以留下空文字高度自动高度
\begin{adjustbox}{minipage=[t][]{1\textwidth},fbox}