我正在 XeTeX 中生成通讯录,但发现了一个无法解决的问题。通讯录是按列拆分的姓名、地址和号码列表。理想情况下,一个条目应如下所示(下划线代表空格):
姓名.........号码
地址______号码2
我没有遇到任何问题来实现这种布局,只有当名称太长并分成多行时才会出现一个小问题,然后它应该看起来像这样:
长名字
更多名称......编号
或者
长名字
...............数字
第一个也没什么问题,但是第二个就让我头疼了,结果是这样的:
长名字
数字
没有点...
这是我的代码的简化版本(但足以重现问题):
\documentclass[a4paper,11pt]{book}
\usepackage[b4paper, left=2cm, right=1.5cm, bottom=4cm, top=2cm]{geometry}
\usepackage[croatian]{babel}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
\usepackage{xcolor}
\usepackage{multicol}
% Font
\setmainfont{Calibri}
\begin{document}
\begin{multicols}{5}
% Case 1
\noindent
\vbox {\vfil
\hbox to \columnwidth {
\parbox{0.97\columnwidth}{
\scriptsize
\raggedright{\textbf{Name}}\dotfill~(XX)~XXX~XXX\\
\emph{Address}\hfill~(XX)~XXX~XXX}
}
\vfil
}
% Case 2
\noindent
\vbox {\vfil
\hbox to \columnwidth {
\parbox{0.97\columnwidth}{
\scriptsize
\raggedright{\textbf{Name Lorem Ipsum Lorem Ipsum Lorem Ipsum}}\dotfill~(XX)~XXX~XXX\\
\emph{Address}\hfill~(XX)~XXX~XXX}
}
\vfil
}
% Case 3
\noindent
\vbox {\vfil
\hbox to \columnwidth {
\parbox{0.97\columnwidth}{
\scriptsize
\raggedright{\textbf{Name Lorem Ipsum Lorem}}\dotfill~(XX)~XXX~XXX\\
\emph{Address}\hfill~(XX)~XXX~XXX}
}
\vfil
}
\vspace*{\fill}
\end{multicols}
\end{document}
(实际上我定义了类并且每个地址簿条目都是一个命令。)
那么,您能帮我诊断一下这个问题吗?为什么\dotfill
在第三种情况下数字没有向右推?
答案1
引线就像胶水一样,在行首被丢弃。因此,您需要更像\hspace*
在行\hspace
首放置一些不可见的东西来阻止它被丢弃的东西,将其替换\dotfill
为
\penalty0\hbox{}\nobreak\dotfill
这使得可以在箱子前休息,但不允许在箱子后休息,以便领导者受到箱子的保护并且不会被丢弃。