我正在尝试编写一份文件供几个人签名,他们的名字字符数不同。我想通过填充空格使它们的长度相同。例如,在以下文档中
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = xelatex
\documentclass[UTF8]{article}
\usepackage{ctex}
\begin{document}
\pagestyle{plain}
\maketitle
李梅:
\
王晓华:
\
张丽娟:
\end{document}
我希望它能生产
李 梅:
王晓华:
张丽娟:
冒号实际上应该完全对齐,但这很难实现。
对我来说最直观的方法是写一个随机字符在中间名字并将多余的字符设为白色。但这似乎很麻烦,而且不容易推广。有没有更好的方法?
先感谢您!
答案1
一个简单的方法是使用tabular
:
\documentclass{article}
\begin{document}
\noindent
\begin{tabular}{@{}l@{:}}
First\\
Second\\
Third
\end{tabular}
\end{document}
@{}
抑制或替换列之间的空格,或者第一列之前和最后一列之后的空格(如此处所用)。
使用包含中文字符的模板,结果如下:
\documentclass[UTF8]{article}
\usepackage{ctex}
\begin{document}
\noindent
\begin{tabular}{@{}l@{:}}
李梅\\
王晓华\\
张丽娟
\end{tabular}
\end{document}
如果你想在冒号前添加空格,你可以这样开始tabular
:
\begin{tabular}{@{}l@{\kern 2pt:}}
如果您希望第二列占据所有剩余空间直到右边距,则可以使用的X
列类型tabularx
(我们告诉tabularx
使X
列足够大以便表格填满整个\linewidth
;如果您愿意,您可以有多个X
列,它们将共享其他列留下的剩余空间):
\documentclass{article}
\usepackage{tabularx}
\usepackage{lipsum}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}{@{}l@{:}X@{}}
First & \lipsum[1][1-2]\\
Second & \lipsum[2][1-2]\\
Third & \lipsum[3][1-2]
\end{tabularx}
\end{document}
您可以按照tabularx
以下方式开始在冒号后插入一些空格:
\begin{tabularx}{\linewidth}{@{}l@{:\enspace}X@{}}
调整第一列
跟进在评论中请求,这里有一个小技巧可以让第一列自动对齐,而无需手动在字符之间插入空格。这肯定需要一个基于 Unicode 的引擎,例如 XeTeX 或 LuaTeX。
\documentclass[UTF8]{article}
\usepackage{ctex}
\usepackage{collcell}
\makeatletter
\newcommand*{\@insertHfills}[1]{%
\unless\ifx#1\@nil
#1\hfill \expandafter\@insertHfills
\fi
}
% Append an \hfill after each token of #1 and set \parfillskip to zero
% after the result has been left in the TeX input stream.
\newcommand*{\insertHfills}[1]{%
\@insertHfills#1\@nil
\parfillskip=\z@\relax
}
\makeatother
% Define a special column type derived from l (r or c would do as well)
% that wraps the cell contents as the argument of \insertHfills.
\newcolumntype{E}{>{\collectcell\insertHfills}l<{\endcollectcell}}
\begin{document}
\noindent
\begin{tabular}{@{}E@{:}}
李梅 \\
王晓华 \\
王j华 \\
张丽娟
\end{tabular}
\end{document}