我认为这更多的是因为我不懂 Tex 的语法。我想按如下所示格式化我的段落。似乎有一种方法可以将我使用的三个命令合并为一个语句,但我无法完全理解。感谢任何人提供的帮助......(虽然也许我一开始就不应该使用 {hangparas};我不知道)
\documentclass{article}
\usepackage{lipsum} % http://ctan.org/pkg/lipsum
\usepackage[english]{babel}
\usepackage{hanging}
\begin{document}
\lipsum[1]
\begin{hangparas}{0.5cm}{1}
\setlength{\leftskip}{2cm}
\setlength{\rightskip}{2cm}
\lipsum[2]
\setlength{\rightskip}{0cm}
\setlength{\leftskip}{0cm}
\end{hangparas}
\lipsum[3]
\end{document}
詹姆士。
答案1
使用列表,这样更简单。我保留了你的原始代码以供比较。
在代码之前,先解释一下。在 LaTeX 中,几乎所有特殊格式的文本部分都是通过列表获得的:center
、quote
、quotation
都以列表的形式实现。这允许嵌套在那些特殊位置列出,这是hanging
不允许的,因为列表使用\parshape
会覆盖赋予的任何值\hangindent
。
所有这些特殊环境都是“一项”列表。任何列表都必须\item
在开头有一个命令。基本list
环境没有为项目定义标签,因此我们可以直接发出\item\relax
,不会打印任何内容,但 LaTeX 将处于合适的状态,尊重给定的值和其他参数。为什么而不仅仅是?因为寻找可能的可选参数;\leftmargin
会等效,但效率略高。\rightmargin
\item\relax
\item
\item
\item[]
\item\relax
最后说明:最好使用\list
and\endlist
而不是\begin{list}
and \end{list}
;这样,关于错误关闭的错误消息(比如你输入错误\end{beion}
)将指的是未关闭的bejon
环境,而不是list
。
\documentclass{article}
\usepackage{lipsum} % http://ctan.org/pkg/lipsum
\usepackage[english]{babel}
\usepackage{hanging} % remove this, it's just to show the output
\newenvironment{bejon}
{\list{}{
\itemindent=-.5cm
\leftmargin=2.5cm
\rightmargin=2cm
\topsep=0pt
\partopsep=0pt
}\item\relax}
{\endlist}
\begin{document}
\lipsum[2]
\begin{hangparas}{0.5cm}{1}
\setlength{\leftskip}{2cm}
\setlength{\rightskip}{2cm}
\lipsum[2]
\setlength{\rightskip}{0cm}
\setlength{\leftskip}{0cm}
\end{hangparas}
\lipsum[2]
\begin{bejon}
\lipsum[2]
\end{bejon}
\lipsum[3]
\end{document}
可能更容易enumitem
:
\documentclass{article}
\usepackage{lipsum} % http://ctan.org/pkg/lipsum
\usepackage[english]{babel}
\usepackage{enumitem}
\newenvironment{bejon}
{\itemize[
label={},
itemindent=-.5cm,
leftmargin=2.5cm,
rightmargin=2cm,
nosep]
\item\relax}
{\enditemize}
\begin{document}
\lipsum[2]
\begin{bejon}
\lipsum[2]
\end{bejon}
\lipsum[3]
\end{document}
答案2
上述回复确实很有帮助——非常感谢。但事实证明,我所想的并不是我真正想要的。我想要的是让文本块中的每一行都从固定的左边距开始,但以缩进的方式环绕。希望下面的例子能说明这一点?
\documentclass{article}
\usepackage{lipsum} % http://ctan.org/pkg/lipsum
\usepackage{blindtext}
\usepackage[english]{babel}
\setlength{\parskip}{1em}
\newenvironment{bejon}
{\list{}{
\itemindent=-.5cm
\leftmargin=2.5cm
\rightmargin=2cm
\topsep=0pt
\partopsep=0pt
}\item\relax}
{\endlist}
\begin{document}
\begin{bejon}
Here's a line which I want to be wrapped onto the next line but be indented in the same way that poems often are. This works fine.
\end{bejon}
\begin{bejon}
Here's the next line. Its left positioning is nice, but I don't like the way it skips a line
\end{bejon}
\begin{bejon}
The gaps between lines are too big.
\end{bejon}
\blindtext
\begin{bejon}
Here's an alternative \\
I like the way the next starts without a gap, but I don't want it indented. \\
\end{bejon}
\end{document}
答案3
关于您提到的线条间隙,删除\setlength{\parskip}{1em}
或仅在部分之前设置新的长度即可消除间隙。