我决定编写我自己的第一个 latex 类,该类必须重现用于在 word 中制作的某些内部文档类型的模板。我找不到如何做一件事。在模板中,所有标准文本(以及列表等)都略有预期,而标题仍然没有预期。您可以使用 hangindent 来做到这一点,但只能针对一个段落。如何在我自己的类中定义这种行为是所有正常文本的标准?
我不想使用任何外部课程......
答案1
以下是部分解决方案。它使用我怎样才能更改部分文本的边距?缩进所有文本,并自定义章节和小节标题的缩进调整章节标题,使其不缩进(必需这titlesec
)。以下是前后对比:
前:
后:
笔记:
我将其标记为部分,因为我无法取消缩进章节标题无需使用包裹
titlesec
。以下方法之一应该有效,但我不知道为什么不行:\def\section#1{\hspace*{-\LeftMargin}\OldSection{#1}}
或者
\def\section#1{\endChangeMargin\OldSection{#1}\ChangeMargin{\LeftMargin}{\RightMargin}}
我发布了一个后续问题来了解为什么会发生这种情况:取消缩进章节标题。
标题也存在轻微的垂直间距问题
section
,但我认为这与章节标题混乱有关,因为在我尝试取消缩进章节标题的失败尝试中,这个问题更加明显。包裹
showframe
仅用于显示页边距。- 包裹
lipsum
仅用于提供虚拟文本。
代码:
\documentclass{article}
\usepackage{titlesec}
\usepackage{showframe}
\usepackage{lipsum}
\newcommand*{\LeftMargin}{0.5cm}%
\newcommand*{\RightMargin}{0.0cm}%
%% https://tex.stackexchange.com/questions/588/how-can-i-change-the-margins-for-only-part-of-the-text
\def\ChangeMargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}%
\let\endChangeMargin\endlist%
\AtBeginDocument{\ChangeMargin{\LeftMargin}{\RightMargin}}
\AtEndDocument{\endChangeMargin}
%% Not sure why these did not work
%\let\OldSection\section
%\def\section#1{\hspace*{-\LeftMargin}\OldSection{#1}}%
%\def\section#1{\endChangeMargin\OldSection{#1}\ChangeMargin{\LeftMargin}{\RightMargin}}%
%% https://tex.stackexchange.com/questions/25082/customizing-indentation-in-section-and-subsection-headings
\titlelabel{\hspace*{-\LeftMargin}\thetitle~}
\begin{document}
\lipsum*[1-3]
Here is a list:
\begin{enumerate}
\item First item
\item Second item
\end{enumerate}
\section{Section Name}
\lipsum[1-3]
\end{document}
答案2
我不知道我是否完全理解了你的问题。我在评论中指出的一个最小工作示例将极大地帮助你理解你的问题。
您想删除所有缩进吗?那么parskip
包就是您要找的。看看有没有一种简单的方法可以让我整个文档的段落之间有空格而不是缩进?。 写吧
\usepackage{parskip}
在你的序言中。
你想让第一段缩进吗?那么使用该包时,indentfirst
可以这样写
\usepackage{indentfirst}
在你的序言中。
如果你希望你的班级根据你的情况加载两个包中的一个,那么写一个
\RequirePackage{parskip}
或者
\RequirePackage{indentfirst}
在您的.cls
文件中。