newgeometry 使内容运行到下一页

newgeometry 使内容运行到下一页

从一开始就感谢大家在这方面的帮助。我对 LaTeX 完全陌生,因为我正在写我的学士论文,所以我肯定犯了很多错误……

我使用该geometry包是因为我需要在论文的某个点修改文本宽度,为此我想\newgeometry在自定义环境中使用它。

问题在于,应受新几何形状影响的文本部分一直延伸到下一页。

我读过这个 在环境中使用 \restoregeometry,下一页超出页面底部 问题,正如您所看到的,我也使用了该\aftergroup命令,但问题仍然存在。

我的自定义环境是:

\newenvironment{esempio}[1]%
{
    \vspace{1.5ex}
    \noindent
    \underline{#1}
    \nopagebreak
    \newgeometry{textwidth=\textwidth}
    %\leftskip=1cm
    %\rightskip\leftskip
}
{
    \par
    \aftergroup\restoregeometry
}

我的用法如下:

\begin{esempio}{$k=2$}
    Il Poligono di Controllo \`e formato da $\{P_0, P_1, P_2\}$.
    La curva di Bezier \`e definita come $$P_0^2(t) = (1-t)P_0^1(t) + tP_1^1(t)$$
\end{esempio}

我把“ K=2 ”的下划线放在了正确的位置,但是下面的文字全部都移到了下一页。

我的目标是拥有一个可以让我格式化如下文本主体的环境:

bla bla bla bla bla bla bla bla bla bla bla bla
K=2
   bla bla bla bla bla bla bla bla
   bla bla bla bla bla bla bla bla

附注一下,你可以看到我也尝试了\leftskip

它可以很好地完成普通文本的工作,但大多数时候,我还会在侧面添加一张图片,并希望文本环绕它,这样\leftskip它会在图像左侧留下空间,因此文本不能很好地换行。


@ egreg:感谢您的热烈欢迎和小贴士:)

@ Gonzalo:谢谢,您的代码对文本非常有效!但是,正如我在原始问题中所说,一种非常常见的情况是在该文本中插入一个图形,我希望文本环绕在图片周围。

但是,这会在编译过程中引起一些警告和坏框,并且图形会向下移动并放置在不是“esempio”框之后,而是下一段之后,并且还会产生巨大的空白......非常奇怪。

下方是MWE(rettaBezier是一张4cmx4cm的正方形图片)

\documentclass[a4paper,11pt,italian]{book}

\usepackage[italian]{babel}
\usepackage{graphicx, wrapfig, subfig}
\usepackage{changepage}
\usepackage{calc}
\usepackage{amsmath, amsthm, amssymb, mathrsfs, setspace}
\usepackage{mycommands}
\usepackage{indentfirst}
\usepackage[format=hang,font=footnotesize,labelfont=bf]{caption}
\graphicspath{{./images/}{./matlab/}}
\usepackage{lipsum}




\begin{document}
\lipsum[2]
\begin{esempio}{$k=1$}
    \begin{wrapfigure}{o}[1cm]{0cm}
        \centering
        \includegraphics{rettaBezier}
        \caption{Retta ottenuta con $P_0 = [0, 0] , P_1 = [1, 1]$}
        \label{rettaBezier}
    \end{wrapfigure}
    \lipsum[2]
\end{esempio}

\lipsum[2]


\end{document}

答案1

作为埃格尔提及评论\newgeometry会影响整个页面。要临时更改文本区域宽度,您可以adjustwidth使用更改页面包裹:

\documentclass{article} 
\usepackage{changepage}
\usepackage{lipsum}

\begin{document}

\lipsum[2]
\begin{adjustwidth}{-2cm}{-2cm}
\lipsum[2]
 \end{adjustwidth} 
\lipsum[2]

\end{document}

在此处输入图片描述

您的esempio环境可能看起来像以下示例(根据您的需要更改长度):

\documentclass{article} 
\usepackage{changepage}
\usepackage{soul}
\usepackage{lipsum}

\newenvironment{esempio}[1]%
  {\vspace{1.5ex}
  \begin{adjustwidth}{1cm}{1cm}
   \rlap{\ul{#1}}\par\nobreak
  }
  {\end{adjustwidth}}

\begin{document}

\begin{esempio}{$k=2$}
\lipsum[2]
\end{esempio} 
\lipsum[2]

\end{document}

在此处输入图片描述

无需额外的软件包,你可以使用列表:

\documentclass{article} 
\usepackage{soul}
\usepackage{lipsum}

\newenvironment{esempio}[1]%
  {\vspace{1.5ex}
  \list{}{\setlength\leftmargin{1cm}\setlength\rightmargin{1cm}}\item\relax
  \rlap{\ul{#1}}\nobreak
  }
  {\endlist}

\begin{document}

\lipsum[2]
\begin{esempio}{$k=2$}
\lipsum[2]
\end{esempio} 
\lipsum[2]

\end{document}

为了能够在环境wrapfigure中使用esempio,一种选择是使用minipage来括住图形及其环绕文本(当然,现在 里面的材料minipage不允许分页符):

\documentclass{article} 
\usepackage{soul}
\usepackage{wrapfig}
\usepackage{lipsum}

\newenvironment{esempio}[1]%
  {\vspace{1.5ex}
  \list{}{\setlength\leftmargin{1cm}\setlength\rightmargin{1cm}}\item\relax
  \rlap{\ul{#1}}\nobreak
  }
  {\endlist}

\begin{document}

\lipsum[2]
\begin{esempio}{$k=2$}
\begin{minipage}[t]{\linewidth}
\begin{wrapfigure}{r}{5cm}
  \centering
  \rule{4cm}{3cm}
  \caption{a test figure}
  \label{fig:test}
\end{wrapfigure}
\lipsum[2]
\end{minipage}
\end{esempio} 
\lipsum[2]

\end{document}

结果如下:

在此处输入图片描述

答案2

感谢 Gonzalo 的建议。但是,我讨厌它,minipage并尽量避免使用它,因此我想出了这个解决方案

\newenvironment{esempio}[3]%
{
    \vspace{1.5ex}
    \rlap{\underline{#1}}
    \par
    \setlength{\parindent}{0cm}
    \nopagebreak
    \leftskip=#2cm
    \rightskip=#3cm
}
{
    \par
}

它可能不是有史以来最优雅的代码,但它完成了工作并且非常适合我的项目,特别是因为它允许在“esempio”中间进行分页。

相关内容