答案1
正如 Bubaya 所说,一种可能性是将“标签”放在一个固定宽度的框中,尽管我不会“摆弄”幻影之类的东西。我已经定义了一个命令来执行此操作。毫无疑问,进一步的改进(例如自动将宽度设置为最长的标签)是可取的。
另请注意:
- 如果您想要一个枚举列表,我会要求提供一个枚举列表,而不是手动设置标签。
- 我不赞成
\quad
在项目标签后添加 s 来留出额外空间。如果列表不正常,请更改\labelsep
和 (如果需要)\labelwidth
。任何时候添加临时间距命令,您(可能)都做错了。
最后请注意:如果要用于多个实例,我不会这样做。请正确操作。设置列表类型:设置时必须考虑的问题会在易用性和无错误性方面得到一次又一次的回报。
下面演示了两种替代方案。我显然会在生产中将列表定义放在序言中。
\documentclass{article}
\usepackage{enumitem}
\newcommand{\parsedescription}[2]{%
\makebox[2.5cm][l]{#1}{#2}}
\begin{document}
\section{Hand rolled}
This is a hand-rolled version
\begin{itemize}
\item Output of scanner:
\begin{enumerate}
\item\parsedescription{Identifier}{program}
\item\parsedescription{White\_Space}{' '}
\end{enumerate}
\end{itemize}
\section{Properly done}
And this is, much more semantically correct:
\newcounter{parsecounter}
\newlist{parse}{description}{1}
\setlist[parse]{style=sameline,
labelwidth=3cm,
leftmargin=!,
labelindent=1em,
font=\normalfont,
before={%
\setcounter{parsecounter}{0}%
\renewcommand\makelabel[1]{%
\stepcounter{parsecounter}%
\arabic{parsecounter}.\enspace##1}}}
\begin{itemize}
\item Output of scanner:
\begin{parse}
\item[Identifier]program
\item[White\_Space]' '
\end{parse}
\end{itemize}
\end{document}
答案2
如果您无法使用表格,您可以随时手动摆弄\phantom
或和\hphantom
,其中后者由\makebox
\widthof
calc
包。因此,要将“放在‘program’一词下面,您可以执行以下操作:
\documentclass{article}
\usepackage{calc}
\begin{document}
\begin{enumerate}
\item \makebox[\widthof{White\_Space}][l]{Identifier}\quad program
\item White\_Space \quad \makebox[\widthof{program}]{''}
\end{enumerate}
\end{document}
然而,如果这是一个很长的列表,请考虑使用环境tabular
。