从一开始就感谢大家在这方面的帮助。我对 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”中间进行分页。