偏离中心对齐文本

偏离中心对齐文本

我想知道是否有一种推荐的方法可以将文本在一行中的某个位置居中?

当尝试对齐多行连续的等宽字符时,如果字符串长度相等,对齐点位于中间,则对齐会很顺利。但是,如果字符串长度不同和/或要对齐的点偏离中心,则对齐会更具挑战性。

我设法通过在行首添加/减去空格来实现这一点\hspace*,但很好奇是否有更好的方法。

下面是一个例子。首先,有字符 AG,其中“D”居中对齐。如果从第一行删除“A”,从第二行删除“G”,则文本不再在“D”处对齐。最后,最后一部分显示了我发现的在“D”处重新对齐的方法。

\documentclass{article}
\begin{document}
\begin{center}
    \texttt{ABCDEFG}\\
    \texttt{GFEDCBA}
    \par\vspace*{10pt}
    \texttt{BCDEFG}\\
    \texttt{GFEDCB}
    \par\vspace*{10pt}
    \hspace*{5pt}\texttt{BCDEFG}\\
    \hspace*{-6pt}\texttt{GFEDCB}
\end{center}
\end{document}

答案1

我建议使用常规tabular环境并使用列对齐字符&来指示您的中心点或枢轴点。例如,

\documentclass{article}
\begin{document}
\ttfamily
\begin{tabular}{r@{}c@{}l}
  ABC&D&EFG \\
  GFE&D&CBA \\[10pt]
   BC&D&EFG \\
  DFE&D&CB
\end{tabular}
\end{document}

表格1

尽管从技术上讲与@egreg的答案不同,但您可以考虑&表示允许您对齐枢轴点的“填充字符”。tabular使用 将常规列间空间设置为零@{}。 这确保三列之间没有分隔。

由于此解决方案现在属于 的范围tabular,因此所有tabular(和array)相关内容都适用。例如,如果您希望在数据透视表条目下划线,请C使用\newcolumntypearray包裹. 以下作品:

\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\newsavebox{\colbox}
\begin{document}
\newcolumntype{C}{@{}>{\begin{lrbox}{\colbox}}c<{\end{lrbox}\underline{\usebox{\colbox}}}@{}}%
\ttfamily
\begin{tabular}{rCl}
  ABC&DEF&G \\
  G&FED&CBA \\[10pt]
   BC&DEF&G \\
  G&FED&CB
\end{tabular}
\end{document}

表2

也许你希望突出显示(使用一些背景颜色)数据透视表列。可以使用colortbl包裹(连同xcolor包裹) 和 (比如说) black!15(15% 黑色):

\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\usepackage{colortbl}% http://ctan.org/pkg/colortbl
\usepackage{xcolor}% http://ctan.org/pkg/xcolor
\begin{document}
\renewcommand{\tabcolsep}{0pt}
\newcolumntype{C}{@{}>{\cellcolor{black!15}}c@{}}%
\ttfamily
\begin{tabular}{rCl}
  ABC&DEF&G \\
  G&FED&CBA \\[10pt]
   BC&DEF&G \\
  G&FED&CB
\end{tabular}
\end{document}

表3

答案2

您可以定义一个“填充字符”;在下面我使用的代码中?(它必须是您在环境中不会使用的字符):

\documentclass{article}
\newenvironment{ttcenter}[1][?]
  {\begin{center}\catcode`#1=\active
   \scantokens{\def#1{\leavevmode\phantom{A}}}\ttfamily}
  {\end{center}}

\begin{document}
\begin{ttcenter}
ABCDEFG\\
GFEDCBA\\[10pt]
?BCDEFG\\[10pt]
GFEDCB?
\end{ttcenter}
\end{document}

输入也将“视觉对齐”。如果您需要其他字符,请将其指定为可选参数:

\begin{ttcenter}[-]
ABCDEFG\\
GFEDCBA\\[10pt]
-BCDEFG\\[10pt]
GFEDCB-
\end{ttcenter}

一种更简单的方法是,如果“填充”只在字母的一侧进行

\newenvironment{ttcenter2}
  {\begin{center}\ttfamily\begin{tabular}{@{}c@{}}}
  {\end{tabular}\end{center}}


\begin{ttcenter2}
        ABCDEFG\\
        GFEDCBA\\[10pt]
\hfill   BCDEFG\\[10pt]
        GFEDCB\hfill
\end{ttcenter2}

例如,如果有洞,则需要“填充字符”版本。

答案3

您可以简单地使用\phantom{}宏来插入与被删除的字符等同的空格:

\documentclass{article}
\begin{document}
\begin{center}
    \texttt{\phantom{A}BCDEFG}\\
    \texttt{GFEDCB\phantom{A}}
\end{center}
\end{document}

虽然这将解决给定的代码示例,但@egreg 和@Werner 提供的解决方案提供了额外的灵活性,并且可能更适合您的确切需要。

相关内容