对齐:“突破”环境(枚举/小页面)

对齐:“突破”环境(枚举/小页面)

我有一个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 。\noindentminipage

示例输出

\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}

在此处输入图片描述

相关内容