编号作业的简单方法

编号作业的简单方法

手工做作业时,我喜欢用隐形边距来限制作业。对于每个问题,我喜欢在问题的左侧编号,所有编号都位于隐形边距的右侧。

为了在 LaTeX 中模仿这一点,我写了下面的内容(希望这也能澄清我想要解释的内容。)

\newcommand{\problem}[1]{
\newlength{\len}\settowidth{\len}{ #1.}
\noindent\hspace{-\the\len} #1.
\let\len\undefined}

\problem{1a}
Whatever I'd like to write, such as solutions or problems and solutions

我的想法是,当我要开始一个问题时,我会将标签向左推,距离它的宽度不远。这不一定是首选方法,我想知道是否有比我更精通 TeX 的人可以提出建议。我的方法存在对齐问题,在不同的环境/布局下可能不够稳定。

标准:

  • 编号方案右对齐,位于作品左侧(如果这种程度的移位可以操作就好了)
  • 工作不应该缩进
  • 极简主义方法!我不太喜欢创建需要外部软件包的超大解决方案。这不是一个疯狂的设计,考虑到我离没有额外软件包的目标有多近,我相信这是可以做到的

答案1

您只需使用 即可完成您想要的操作\llap,它会将其内容打印到左侧并将“打印头”留在当前位置。您说您不想使用任何软件包,但为了证明它的工作原理,我使用了两个软件包:

  • 几何学打印页面周围的框架
  • 姆韦使用 打印一些随机文本\blindtext

这两个包仅用于演示目的,可以从下面的代码中删除。

下面的 MWE 产生

在此处输入图片描述

实际代码如下:

\documentclass{article}
\usepackage[showframe]{geometry}% only for demonstration purposes => page frame
\usepackage{mwe}% only for demonstration purposes => blind text
\newcommand{\problem}[2]{\noindent\llap{#1.\space}#2}

\begin{document}

  \blindtext

  \problem{1a} Whatever I'd like to write, such as solutions
  or problems and solutions

  \blindtext

  \problem{10c} Whatever I'd like to write, such as
  solutions or problems and solutions

\end{document}

请注意,我已将其定义\problem为采用两个参数。这只是一个巧妙的办法,可以消除\problem{...}和 之间的任何多余空格。

尽管如此,最好将其定义为一个环境,它将被用作

\begin{problem}{1a}
    Whatever I'd like to write, such as solutions or problems and solutions
\end{problem}

这可以更好地处理间距问题,并且更符合 LaTeX 范式。例如,\problem如果上面的宏上方没有空行,它将无法执行您想要的操作。作为环境,我将其定义为:

\newenvironment{problem}[1]{\trivlist\item[\llap{#1.}]}{\endtrivlist}

这不再需要虚拟的第二个参数#2,并且当环境前面没有空行时,它现在会做正确的事情。(请注意,这trivlist是一个标准的 LaTeX 环境,因此不需要任何额外的包!)输出基本与以前相同。

相关内容