我有一个enumerate
环境minipage
(可能不需要小页面,我在这里只包含它来显示边距)。每个项目都有一段描述性文字,并包含带有数字的较小项目枚举,然后对每个主要项目进行求和。最后,将中间总和相加为总数。我希望中间总和与右边距/总数对齐。我有什么选择?
笔记:
- 这些金额以古丹麦货币(马克、达勒、斯基林)计算,其求和规则随时间而变化。
- 外部枚举环境可能会跨越多个页面。
在下面的例子中,绿色边距是可以的,蓝色边距应该沿着红色箭头移动以匹配绿色边距:
梅威瑟:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\begin{minipage}{.9\textwidth}
\begin{enumerate}
\item \lipsum[1]
\begin{enumerate}
\item Something \dotfill 11
\item Something \dotfill 84 \hfill 95 % "95" needs to break out of minipage and flush to right margin
\end{enumerate}
\item \lipsum[2]
\begin{enumerate}
\item Something \dotfill 4
\item Something \dotfill 300 \hfill 304 % ditto
\end{enumerate}
\end{enumerate}
\end{minipage}
\null\hfill Total: 399
\end{document}
答案1
您可以将固定大小的框中的文本隐藏在零宽度的框中。这里我将其封装在一个宏中。要使此匹配,您还需要相应框中的总数。您应该根据您知道的剩余空间来计算宽度。请注意,您在 之前\subtotal
缺少了 a 。\noindent
minipage
\documentclass{article}
\usepackage{lipsum}
\newlength{\mytotboxwd}
\setlength{\mytotboxwd}{20pt}
\newcommand{\subtotal}[2][\mytotboxwd]{\hbox to 0pt{\hbox to #1{\hss #2}\hss}}
\newcommand{\total}[2][\mytotboxwd]{\hbox to #1{\hss #2}}
\begin{document}
\setlength{\mytotboxwd}{.1\textwidth}
\noindent
\begin{minipage}{.9\textwidth}
\begin{enumerate}
\item \lipsum[1]
\begin{enumerate}
\item Something \dotfill 11
\item Something \dotfill 84\subtotal{95}
\end{enumerate}
\item \lipsum[2]
\begin{enumerate}
\item Something \dotfill 4
\item Something \dotfill 300\subtotal{304}
\end{enumerate}
\end{enumerate}
\end{minipage}
\null\hfill\total{Total: 399}
\end{document}
答案2
你想要这样的东西吗?需要运行两次 LaTeX 才能同步。
\documentclass{article}
\usepackage{microtype} % not essential, but better typesetting
\usepackage{lipsum,showframe}
\newenvironment{totals}
{%
\par
\addtocounter{envtotals}{1}%
\settowidth{\totalswidth}{\ref{\theenvtotals label}\quad}%
\setcounter{totals}{0}%
\begin{list}{}{\leftmargin=0pt\rightmargin=\totalswidth}\item\relax
}
{\par
\addtocounter{totals}{-1}\refstepcounter{totals}\label{\theenvtotals label}%
\noindent\hfill Total:\subtotalbox{\ref{\theenvtotals label}}%
\end{list}
}
\newcommand{\subtotalbox}[1]{\makebox[0pt][l]{\makebox[\totalswidth][r]{#1}}}
\newenvironment{quantities}
{\begin{enumerate}\setcounter{subtotals}{0}}
{\unskip\subtotalbox{\thesubtotals}\addtocounter{totals}{\value{subtotals}}\end{enumerate}}
\newcommand{\quantity}[2]{%
\item #1\dotfill#2%
\addtocounter{subtotals}{#2}%
}
\newcounter{envtotals}
\newcounter{totals}
\newcounter{subtotals}
\newlength{\totalswidth}
\begin{document}
\begin{totals}
\begin{enumerate}
\item \lipsum[1]
\begin{quantities}
\quantity{Something}{11}
\quantity{Something}{84}
\end{quantities}
\item \lipsum[2]
\begin{quantities}
\quantity{Something}{4}
\quantity{Something}{300}
\end{quantities}
\end{enumerate}
\end{totals}
\end{document}
答案3
我最终这样做了:
\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}
\begin{document}
\newlength{\totalboxwidth}
\setlength{\totalboxwidth}{.15\textwidth}
\newcommand\subtotal[1]{\makebox[0pt][l]{\makebox[\totalboxwidth][r]{#1}}}
\newcommand\total[1]{\makebox[\totalboxwidth][r]{#1}}
\begin{enumerate}[rightmargin=\totalboxwidth]
\item \lipsum[1]
\begin{enumerate}[rightmargin=0pt]
\item Something \dotfill 11
\item Something \dotfill 84\subtotal{95}
\end{enumerate}
\item \lipsum[2]
\begin{enumerate}[rightmargin=0pt]
\item Something \dotfill 4
\item Something \dotfill 300\subtotal{304}
\end{enumerate}
\end{enumerate}
\null\hfill Total:\total{399}
\end{document}