我正在尝试学习如何创建类似定理的环境http://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/Theorems.html
为了使下面的代码简单,我实际上并没有定义一个新的环境,而是为环境应该是什么样子编写了实际的内联代码,然后是一个定理环境,以便将我的代码的输出与定理环境的输出进行比较。
情况 1:\hskip \labelsep
仅
这是运行良好的代码。
\documentclass{article}
\usepackage{amsthm}
\newtheorem*{theorem}{Theorem}
\begin{document}
% My environment
\begin{trivlist}
\item[\hskip \labelsep \textbf{Theorem.}]
\begin{itshape}
Lorem Ipsum.
\end{itshape}
\end{trivlist}
% Theorem environment for comparison
\begin{theorem}
Lorem Ipsum.
\end{theorem}
\end{document}
这将产生所需的输出,如下所示。
情况 2:否\hskip \labelsep
我想看看为什么\hskip \labelsep
上面的代码是必要的,所以我将其从我的代码中删除了。
\documentclass{article}
\usepackage{amsthm}
\newtheorem*{theorem}{Theorem}
\begin{document}
% My environment
\begin{trivlist}
\item[\textbf{Theorem.}]
\begin{itshape}
Lorem Ipsum.
\end{itshape}
\end{trivlist}
% Theorem environment for comparison
\begin{theorem}
Lorem Ipsum.
\end{theorem}
\end{document}
这不会产生所需的输出。我的环境的缩进似乎小于实际定理环境的缩进。
这表明这\hskip \labelsep
是必要的。
情况 3:\setlength{\labelsep}{1in}
以及\hskip \labelsep
我尝试在网上搜索以了解为什么\hskip \labelsep
需要获得正确的缩进,但找不到任何对我有意义的东西。我决定找出变化如何\labelsep
影响缩进。
\documentclass{article}
\usepackage{amsthm}
\newtheorem*{theorem}{Theorem}
\setlength{\labelsep}{1in}
\begin{document}
% My environment
\begin{trivlist}
\item[\hskip \labelsep \textbf{Theorem.}]
\begin{itshape}
Lorem Ipsum.
\end{itshape}
\end{trivlist}
% Theorem environment for comparison
\begin{theorem}
Lorem Ipsum.
\end{theorem}
\end{document}
这将产生如下所示的输出。
在此输出中,的行为\labelsep
似乎与http://www.troubleshooters.com/linux/lyx/ownlists.htm
\labelsep — 标签最右侧部分(假设您没有更改标签的默认右对齐方式)与项目主体左侧边距之间的距离。这是您可以进行的最方便的调整之一,以便根据您的具体情况创建最终可读的列表。
谨防:此设置通过将标签推到左侧而不是将主体左侧边距移到右侧来强制执行此距离。如果您设置了此设置,则可能需要向 \leftmargin 添加相应的量,如果您希望标签位于特定位置。请尽早并经常使用它。
我还希望我的环境的缩进比实际定理环境的缩进要多,但正如您在上面的输出中看到的,我的环境的缩进与实际环境的缩进相同。我不知道上述文档中的“BEWARE”注释是否可以解释这一点。
情况 4:\hskip 1in
仅
但是,如果我仅使用\hskip 1in
而不是\hskip \labelsep
,我确实会看到我期望的缩进增加。
\documentclass{article}
\usepackage{amsthm}
\newtheorem*{theorem}{Theorem}
\begin{document}
% My environment
\begin{trivlist}
\item[\hskip 1in \textbf{Theorem.}]
\begin{itshape}
Lorem Ipsum.
\end{itshape}
\end{trivlist}
% Theorem environment for comparison
\begin{theorem}
Lorem Ipsum.
\end{theorem}
\end{document}
下面的输出表明我的环境的缩进比实际定理环境的缩进要多。
您能否向我解释一下这里的作用\hskip \labelsep
并帮助我理解为什么每个输出都以这种方式出现?
答案1
trivlist
将\leftmargin
和设置\labelwidth
为0pt
,并\labelsep
设置为5pt
。
在情况 1 中,你只是添加一些长度(\labelsep
,其默认值为5pt
)前标签;因此您将标签(示例中的“定理”)向右推一个值5pt
;如果您没有添加这个长度,标签就会突出5pt
到文档的左边距(这正是情况 2 中发生的情况)。
在情况 4 中发生了类似的情况,唯一的区别是用于将标签向右推的水平长度是1in
;在这种情况下,标签最左边的字符将1in-5pt
远离文档的左边距。
在情况 2 中,您具有默认行为trivlist
;由于\labelsep
是5pt
,标签最左边的字符将被推5pt
到左边,并将突出5pt
文档的左边距;标签最右边的字符将通过默认\labelsep
值与以下文本分开。
在考虑的三种情况下,标签最右边的字符与项目主体的开头之间的分隔是\labelsep
(5pt
)。
第 3 种情况是唯一一个 的默认值\labelsep
真正发生变化的情况;在这种情况下会发生两件事:由于您将 设置\labelsep
为 ,因此1in
标签将被推到左侧,并将根据此值与项目主体分开;默认标签将突出1in
到文档的左侧;但是,由于您\hskip\labelsep
在标签内部使用了 ,因此标签(“Theorem”)将被推到右侧1in
;总之,标签的最左边的字符将与文档的左边距重合,而标签的最右边的字符将1in
( 的值设置\labelsep
)远离以下文本。
这是一个简单的文档,我在其中将您的四种情况放在一起说明,并解释了结果;我添加了一些粗线来帮助形象化解释中给出的长度;仅使用showframe
选项geometry
来显示文档的左边距:
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{amsthm}
\newtheorem*{theorem}{Theorem}
\newcommand\Text{{\itshape Lorem Ipsum.}}
\begin{document}
\noindent Case 1:
\begin{trivlist}
\item[\hskip \labelsep\textbf{Theorem.}]\Text
\end{trivlist}
\noindent Case 2:
\begin{trivlist}
\item[\textbf{Theorem.}]\Text
\end{trivlist}
\vskip-\baselineskip\llap{\rule{5pt}{3pt}}
\vskip\baselineskip
{
\noindent Case 3:
\setlength{\labelsep}{1in}
\begin{trivlist}
\item[\hskip\labelsep\textbf{Theorem.}]\Text
\end{trivlist}
\vskip-\baselineskip{\bfseries Theorem.}\rule{1in}{3pt}\Text
\vskip\baselineskip
}
\noindent Case 4:
\begin{trivlist}
\item[\hskip 1in\textbf{Theorem.}]\Text
\end{trivlist}
\vskip-\baselineskip\rule{\dimexpr1in-5pt\relax}{3pt}{\bfseries Theorem.} \Text
\end{document}
在 LaTeX 内核中,可以找到使用 构建的默认类定理结构的定义如下\newtheorem
:
\def\@begintheorem#1#2{\trivlist
\item[\hskip\labelsep{\bfseries #1\ #2}]\itshape}
\def\@opargbegintheorem#1#2#3{\trivlist
\item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\itshape}
\labelsep
由于的默认值为trivlist
,5pt
如果不使用\item[\hskip\labelsep...]
标签,定理将会突出 5pt 到文档左边距。
要直观地了解示例代码(以及一般特定布局的设计)中发生的事情,一种方法是使用layouts
包;该\currentlist
命令可用于提取每个示例代码中不同长度的值:
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{amsthm}
\usepackage{layouts}
\newtheorem*{theorem}{Theorem}
\newcommand\Text{{\itshape Lorem Ipsum.}}
\begin{document}
\begin{trivlist}
\item[a]\Text
\currentlist
\begin{figure}
\listdesign
\caption{Layout of current list}
\end{figure}
\end{trivlist}
\clearpage
\begin{trivlist}
\item[a]\Text
\item[\hskip\labelsep\textbf{Theorem.}]\Text
\currentlist
\begin{figure}
\listdesign
\caption{Layout of current list}
\end{figure}
\end{trivlist}
\clearpage
\begin{trivlist}
\item[a]\Text
\item[\hskip 1in\textbf{Theorem.}]\Text
\currentlist
\begin{figure}
\listdesign
\caption{Layout of current list}
\end{figure}
\end{trivlist}
\clearpage
\setlength{\labelsep}{1in}
\begin{trivlist}
\item[a]\Text
\item[\hskip\labelsep\textbf{Theorem.}]\Text
\currentlist
\begin{figure}
\listdesign
\caption{Layout of current list}
\end{figure}
\end{trivlist}
\end{document}
最后需要注意的是,\itshape 是一个声明形式的开关,使用形式如下
\itshape text
或者
{\itshape text}
以使效果只局限于本群体。