在同一行中冲洗右侧、左侧和中心的简单方法

在同一行中冲洗右侧、左侧和中心的简单方法

在同一行中实现左对齐、右对齐和居中的最简单方法是什么(最好不使用表格或数组等特殊环境)。基于问题,我尝试了以下操作。

但问题是,我希望的位置blablablablablablablablabla正好位于页面的中间,而下面的解决方案无法满足这一要求。

在此处输入图片描述

\documentclass{article}
\title{T} \date{}
\begin{document}
\maketitle 
\noindent
ABC \hfill blablablablablablablablabla \hfill Spring 1985-86\\
\end{document}

答案1

使用\rlap\llap(或\mathrlap\mathllap来自mathtools)(如果您有数学公式)。两种可能的代码:

\documentclass{article}
\usepackage[showframe]{geometry}
\title{T} \date{}

\begin{document}

\maketitle

\noindent
\rlap{ABC} \hfill blablablablablablablablabla \hfill \llap{Spring 1985-86}

\bigskip

\noindent
\makebox[\linewidth][s]{\rlap{ABC} blablablablablablablablabla \llap{Spring 1985-86}}

\end{document} 

在此处输入图片描述

答案2

如果您知道没有重叠的可能性,则使用\makebox或很简单,但是对于较长的文本,适当大小的 parbox 可以很好地工作:\rlap

在此处输入图片描述

\documentclass{article}

\begin{document}


\noindent
\parbox[t]{.2\textwidth}{\raggedright
some text some text some text}\hfill
\parbox[t]{.55\textwidth}{\centering
some text some text some text
some text some text some text
}\hfill
\parbox[t]{.2\textwidth}{\raggedleft
some text some text some text}%


\end{document}

答案3

\documentclass{article}
\title{T} \date{}
\begin{document}
\maketitle 
\noindent
\makebox[0pt][l]{ABC}\hfill\makebox[0pt]{blablablablablablablablabla}\hfill%
\makebox[0pt][r]{Spring 1985-86}\\
\end{document}

在此处输入图片描述

正如 frogon 所指出的,\makebox中心文本是不需要的(尽管请参见 David 的评论,了解在中心内容太长的“错误”情况下它有何不同):

\noindent
\makebox[0pt][l]{ABC}\hfill blablablablablablablablabla\hfill%
\makebox[0pt][r]{Spring 1985-86}\\

也可以使用\centerline

\noindent
\makebox[0pt][l]{ABC}%
\centerline{blablablablablablablablabla}%
\makebox[0pt][r]{Spring 1985-86}\\

为了完整性,我在这里展示并\usepackage[pass,showframe]{geometry}添加了它。

在此处输入图片描述

答案4

我在许多地方都使用过这个功能,因为中间的项目可能太长,所以会盖印左侧和/或右侧的文本。这个功能并不“简单”,但很有用。

\documentclass{article}

\usepackage{calc}
\usepackage{ifthen}

\newsavebox{\leftbox}
\newsavebox{\centerbox}
\newsavebox{\rightbox}
\newlength{\testln}
\newlength{\testwd}

\newcommand{\entry}[3]{%
    \sbox{\leftbox}{#1}
    \sbox{\centerbox}{#2}
    \sbox{\rightbox}{#3}
    \def\tmp{0pt}%
    \ifthenelse{\lengthtest{\wd\leftbox>\wd\rightbox}}% Which is longer, left or right?
        {\setlength{\testln}{\widthof{\usebox{\leftbox}}}}
        {\setlength{\testln}{\widthof{\usebox{\rightbox}}}}
    \setlength{\testwd}{(\textwidth - \wd\centerbox)/2-\testln}%
    \ifdim\testwd<1em\def\tmp{\baselineskip}\fi %% 1 em is the minimum separation from right/left text; change to suit.
    \noindent
    \makebox[\textwidth]{%
        \makebox[0pt][l]{\usebox{\leftbox}}%
        \hfill
        \raisebox{-\tmp}{\usebox{\centerbox}}%
        \hfill
        \makebox[0pt][r]{\usebox{\rightbox}}%
    }%
}

\begin{document}

\entry{Left}{Center is actually quite long and would overprint}{Right xx xx xx xx yyy yy}

\bigskip

\entry{Left}{$x^2+y^2=z^2$}{Right xx xx xx xx yyy yy}

\end{document}

左中右文本示例

更新:我简化了一些数学运算\setlength{\testwd}...,并删除了\makebox[0pt]...放置居中的文本(不需要)。

相关内容