手工做作业时,我喜欢用隐形边距来限制作业。对于每个问题,我喜欢在问题的左侧编号,所有编号都位于隐形边距的右侧。
为了在 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
,它会将其内容打印到左侧并将“打印头”留在当前位置。您说您不想使用任何软件包,但为了证明它的工作原理,我使用了两个软件包:
这两个包仅用于演示目的,可以从下面的代码中删除。
下面的 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 环境,因此不需要任何额外的包!)输出基本与以前相同。