使用小页面进行适当间距,处理边距和后续文本

使用小页面进行适当间距,处理边距和后续文本

所以我有下面这个用户定义函数。这给了我接近最佳的结果。代码应该制作编号的子节。其余文本在下面对齐。由于这些子节通常只跨越 1-3 行,所以看起来不错。

\documentclass[10pt,a4paper]{article}
\usepackage[hmargin=3.5cm,vmargin=2cm]{geometry}
\usepackage{lipsum}
\newcounter{problem}
\setcounter{problem}{0}

\newcounter{navn}[problem]
\renewcommand{\thenavn}{\alph{navn}}
\newcommand{\navn}{  \stepcounter{navn} \hspace{ -0.12cm} \bfseries \thenavn) }
\setcounter{navn}{0}

\newcommand{\NR}[1]
{ \vspace{5mm} \begin{minipage}[t]{0.051 \textwidth}
 \navn \hspace{0pt}
\end{minipage}
\begin{minipage}[t]{0.949\textwidth}
#1 
\end{minipage}
\vspace{-0.3cm}
\addcontentsline{toc}{subsubsection}{\textnormal{ \thenavn })}
}

\newcommand{\UR}[1]
{ \begin{minipage}[t]{0.051 \textwidth}
 \hspace{0pt}
\end{minipage}
\begin{minipage}[t]{0.949\textwidth}
#1
\end{minipage}\vspace*{-0.4cm}
}
\setlength{\parindent}{0in}
\begin{document}
\NR{\lipsum[1]}

{\lipsum[5]}

\UR{\lipsum[2]}

\NR{Hello}

\[ x^2 + 3x + 4 \]

\NR{Problems}

\NR{Problems}

\lipsum[3]
\end{document}    

现在,编译此代码后,可以清楚地看到命令下方的文本\NR越来越接近实际文本。当然,这是由命令内部的负间距引起的。但是,此代码是必需的,否则命令\NR和后面的图像之间的间距会太大。此外,函数的间距也会增加太多。

在代码中还可以看到,命令的长度是默认设置的。

我的 MWE 中 c) 和 e) 之间的间距非常完美。我知道我可以用来\\增加间距,但这很繁琐,而且违背了 Latex 的精神。

我现在的问题是如何正确定义间距?更具体地说:

  • 我如何定义小页面应始终从页面宽度开始,并带有默认缩进?

  • 如何正确定义命令前后的水平空间?(这样它与 MWE 中的相同,但也解决了正常的文本问题)

答案1

如果你不想使用枚举项,这是您的宏的改进版本:

\newcounter{navn}[problem]
\renewcommand{\thenavn}{\alph{navn}}
\newcommand{\navn}{\stepcounter{navn}\bfseries\thenavn)}
\setcounter{navn}{0}

\newcommand{\NR}[1]{%
  \par\addvspace{5mm}\noindent\makebox[0.05\textwidth][l]{\navn}%
  \begin{minipage}[t]{0.95\textwidth}
  #1\par\xdef\tpd{\the\prevdepth}
  \addcontentsline{toc}{subsubsection}{\textnormal{ \thenavn })}%
  \end{minipage}\par\prevdepth\tpd
  %\addvspace{0.3cm}
}

\newcommand{\UR}[1]{%
  \noindent\makebox[0.05\textwidth][l]{}% 
  \begin{minipage}[t]{0.95\textwidth}
  #1\par\xdef\tpd{\the\prevdepth}
  \end{minipage}\par\prevdepth\tpd
  %\addvspace{0.3cm}
}

如果要确保 minipages 之后的最小间距,请取消注释这两行。有关技巧\prevdepth,请参阅如何在使用 minipages (或 \parboxes) 时保持恒定的 baselineskip?

答案2

我建议您使用包enumerate中的选项enumitem。对于不需要缩进的文本,您可以结束并在重新启动时enumerate使用该选项:resume

基本解决方案:

\documentclass[10pt,a4paper]{article}
\usepackage[hmargin=3.5cm,vmargin=2cm]{geometry}
\usepackage{enumitem}
\usepackage{lipsum}

\setlength{\parindent}{0in}

\begin{document}
\begin{enumerate}[label=\textbf{\alph*}),labelsep=1.5em]
    \item \lipsum[1]
\end{enumerate}

\lipsum[5]

\lipsum[2]
    
\begin{enumerate}[resume,label=\textbf{\alph*}),labelsep=1.5em]
    \item Hello
    \[ x^2 + 3x + 4 \]
    
    \item Problems
    
    \item Problems
\end{enumerate}

\lipsum[3]
\end{document}    

更新的解决方案:

如果经常需要退出/恢复枚举环境,您可以将其包装到宏中:

\documentclass[10pt,a4paper]{article}
\usepackage[hmargin=3.5cm,vmargin=2cm]{geometry}
\usepackage{enumitem}
\usepackage{lipsum}

\setlength{\parindent}{0in}

\newcommand{\PauseList}[1]{%
    \end{enumerate}
    #1
    \begin{enumerate}[resume,label=\textbf{\alph*}),labelsep=1.5em]
}%

\begin{document}
\begin{enumerate}[label=\textbf{\alph*}),labelsep=1.5em]
    \item \lipsum[1]

    \PauseList{
        \lipsum[5]
    }

    \item Hello
    \[ x^2 + 3x + 4 \]
    
    \item Problems
    
    \item Problems
\end{enumerate}

\lipsum[3]
\end{document}    

相关内容