在 minipage 环境中(固定长度),我有一个列表;每个列表项由一个短语、后跟一个等号和一个百分比组成。第一个百分比是 60%。
我想要(1)每个短语左对齐(在小页面内)(2)等号对齐,(3)百分比右对齐(在小页面内)以及(4)等号和第一个百分比之间只有一个字间空格。
在接下来的尝试中,我完成了任务(1)、(3)和(4),但没有完成(2)。
\documentclass[12pt]{report}
\begin{document}
\begin{flushleft}
\begin{minipage}{4in}
Midterm Exam \hfill= 60\% \\
Home-work \hfill= 5\% \\
Quizzes\hfill= s\% \\
Report \hfill= S\% \\
Final Exam\hfill= SS\%
\end{minipage}
\end{flushleft}
\end{document}
在花了一些时间尝试找出字母和数字的宽度后,又在 TeX.SX 上花了一些时间,我找到了一个解决方案。(以下解决方案还提供了一些字母和数字的宽度作为奖励。)
\documentclass[12pt]{report}
\begin{document}
\begin{flushleft}
\newlength{\six}
\settowidth{\six}{6}
\newlength{\s}
\settowidth{\s}{s}
\newlength{\eS}
\settowidth{\eS}{S}
\begin{minipage}{4in}
Midterm Exam \hfill= 60\% \\
Home-work \hfill= \hspace{\six}5\% \\
Quizzes\hfill= \hspace{-\s}\hspace{\six}\hspace{\six}s\% \\
Report \hfill= \hspace{-\eS}\hspace{\six}\hspace{\six}S\% \\
Final Exam\hfill= \hspace{-\eS}\hspace{-\eS}\hspace{\six}\hspace{\six}SS\% \\
\end{minipage}
The width of S = \the\eS\\
The width of 6 = \the\six\\
The width of s = \the\s
\end{flushleft}
\end{document}
我的问题是:
这是最好的方法吗?我认为不是。那么最好的方法是什么呢?
(Ps:我尝试在 minipage 环境中使用表格环境。它引入了左缩进,我无法摆脱它。)
答案1
我尝试在 minipage 环境中使用 tabular 环境。它引入了左缩进,我无法消除。
控制表格环境中水平单元格填充的长度是\tabcolsep
。如果您将此长度重置为0pt
小页面内的长度,则效果将仅限于该小页面。您还可以使用环境tabularx
而不是普通环境,tabular
因为它允许指定宽度并提供X
列说明符,该说明符将扩展给定列以填充任何剩余空间。
\documentclass[12pt]{report}
\usepackage{lipsum}
\usepackage{tabularx}
\usepackage{tikz}
\begin{document}
\lipsum[1]
\medskip
\noindent\begin{minipage}{4in}
\setlength\tabcolsep{0pt}
\begin{tabularx}{\linewidth}{X@{ = }r}
Midterm Exam & 60\% \tabularnewline
Home-work & 5\% \tabularnewline
Quizzes & s\% \tabularnewline
Report & S\% \tabularnewline
Final Exam & SS\%
\end{tabularx}
\end{minipage}
% Length check
\\\tikz{\draw[|-|] (0,0) -- node[fill=white]{4in} (4in, 0);}
\medskip
\lipsum[2]
\end{document}
结果:
答案2
表格是正确的解决方案。您可以通过以下方式开始表格规范来消除左缩进@{}
:
\begin{tabular}{@{}l@{ = }r@{\,\%}}
Midterm Exam & 60 \\
Home-work & 5\\
Quizzes & s\\
Report & S\\
Final Exam & SS
\end{tabular}