我正在为一个更大的文档(数百页)排版一封正式信函。我想制作一些类似于letter
document 类的内容,但实际上没有该类。(我已经投入了大量精力memoir
。)
我最纠结的是地址。要求是地址框一直向右浮动,但在框内保持左对齐。
我取得的最好成绩是这个 hack:
\hspace*{0.6\linewidth}
\begin{minipage}{0.4\linewidth}
Joe Bloggs\\
123 ABC Street\\
Townville, Regionia\\
Countrystan\\
Friday, May 29, 2015
\end{minipage}
但结果却不尽人意。
我如何让这个地址浮动到右侧但又使其左对齐?
答案1
将地址放在 a 里面tabular
并使用\hfill
将其推到右边:
\documentclass{memoir}
\usepackage{showframe}% Just for this example
\begin{document}
\hfill
\begin{tabular}{l@{}}
Joe Bloggs \\
123 ABC Street \\
Townville, Regionia \\
Countrystan \\
Friday, May 29, 2015
\end{tabular}
\end{document}
l
使用 移除了左对齐列右侧的列间隙@{}
。左侧无需移除,因为内容已从左边距填充。
答案2
此方法基于\parbox[pos][height][contentpos]{width}{text}
。声明一个新的长度变量,并使用宏将\lnglen
其值设置为输入文本中最长行(即显示日期的最后一行)的宽度。现在,我们可以使用此长度变量来设置 的宽度,以使其与输入文本完全一样宽,这样当使用 刷新到右边缘时,它不会留下任何尾随空格。\settowidth
\parbox
\hfill
为了向您显示输出的确切宽度,我\vrule
在左边缘添加了一个parbox
,并且为了更好地比较,我在顶部vrule
也包含了@werner 的解决方案。
代码:
\documentclass{memoir}
\usepackage{showframe} % Just for this example
\newlength{\lnglen} % defines a new custom length variable
\settowidth{\lnglen}{Friday, May 29, 2015} % sets variable value to longest line's width
\begin{document}
%
%%%%%% by @werner %%%%%%
\hfill
\vrule % added by @amar
\begin{tabular}{l@{}}
Joe Bloggs \\
123 ABC Street \\
Townville, Regionia \\
Countrystan \\
Friday, May 29, 2015
\end{tabular}
%%%%%% by @werner %%%%%%
%
\vspace*{0.2in}
\hrule
\vspace*{0.2in}
%
%%%%%% by @amar %%%%%%
\hfill % flushes everything to right
\vrule
\parbox[c][][s]{\lnglen}{% sets \parbox of \lnglen width!
Joe Bloggs \\
123 ABC Street \\
Townville, Regionia \\
Countrystan \\
Friday, May 29, 2015
}%
%%%%%% by @amar %%%%%%
%
\end{document}
输出: