我有自己的 lstlistings 环境,它们都是框架式的。因为我想调整宽度以便框架从文本开始,所以我在 lstlisting 中使用了一个迷你页面。(参见 MWE)。
但是由于我有相当长的代码片段,所以我想允许列表内的分页符,而使用 minipage 则无法做到这一点。
我无法使用 实现同样的效果\adjustwidth{..}
。
有什么想法吗?(我正在使用 XeLatex)
\documentclass[a4paper]{article}
\usepackage{polyglossia}
\setdefaultlanguage[]{english}
\usepackage{listings}
\lstset{frame=single}
\usepackage{ifthen}
\lstnewenvironment{example}[1]
{
\flushleft \textbf{Example }\def\ExampleDescription{#1\\}\\
\ExampleDescription
\hspace*{\dimexpr\fboxrule+\fboxsep}%
\minipage{\dimexpr\textwidth-\fboxsep-\fboxrule}%
}{
\endminipage
}
\usepackage{lipsum}
\begin{document}
\lipsum[2-6]
\begin{example}{Description}
hello
this is a code example
that should
be long
enough
to provoke a pagebreak
\end{example}
\end{document}
答案1
(这实际上与 Xetex 无关,因此我将其从我的示例中排除。)
抱歉,我一开始误解了你的问题。minipage
默认情况下,A 是不可破坏的,但你可以使用xleftmargin=3pt
和xrightmargin=3pt
选项lstlisting
。3pt
来自framesep
选项的默认值。如果你更改它,也请更改这些(它可以自动化,但如果你不是真的需要它,那就太过分了)。
\documentclass[a4paper]{article}
\usepackage{listings}
\lstset{frame=single, xleftmargin=3pt, xrightmargin=3pt}
\usepackage{ifthen}
\lstnewenvironment{example}[1]
{
\flushleft \textbf{Example }\def\ExampleDescription{#1\\}\\
\ExampleDescription
\hspace*{\dimexpr\fboxrule+\fboxsep}%
}{
}
\usepackage{lipsum}
\begin{document}
\lipsum[2-6]
\begin{example}{Description}
hello
this is a code example
that should
be long
enough
to provoke a pagebreak
\end{example}
\end{document}