这是我的问题
感谢这个\tabto
软件包,这个问题已经解决了。但我想解释一下为什么我的逐字方法不正确。为了方便起见,我在这里粘贴了代码和输出。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[table]{xcolor}
\usepackage{array}
\begin{document}
\begin{enumerate}
\item Tomas\verb+ +Thomas
\item Maine\verb+ +Main
\item Patty\verb+ +Patti
\item Roberts\verb+ +Robertson
\item Springfield\verb+ +Springvale
\item Nixon\verb+ +Dixon
\end{enumerate}
\end{document}
结果如下:
如您所见,第二行并未完全对齐,尽管它应该\verb
忠实地打印,无论源代码中有多少空格。
我想要一个解释,为什么情况并非如此,以及我的理解哪里\verb
出了问题。
答案1
为什么代码没有产生预期的结果?
输出中的字体是所谓的比例字体,这意味着字母并非都具有相同的宽度,而是仅占据它们所需的空间。在这样的字体中,“i”占用的宽度小于“X”或“M”。
您可以在前三行中看到这种效果:“Tomas”、“Maine”和“Patty”的字母数量相同,但它们在末尾没有完全对齐。这是因为字母的宽度不同,“Patty”有两个较小的“t”,“Maine”有一个细的“i”,但“Tomas”中的字母都相当宽。
“Springfield” 就是一个很好的例子:它包含小写字母“i”和“l”,此外还有一个“fi”连字,使本来就很细的“f”和“i”更加紧密地靠在一起。在输出中
MMMMMMMMMMM
会比
Springfield
字母数量相同。
因此,仅通过计算字符和空格是无法完美地对齐单词的。
如果你看一下代码
\begin{enumerate}
\item Tomas\verb+ +Thomas
\item Maine\verb+ +Main
\item Patty\verb+ +Patti
\item Roberts\verb+ +Robertson
\item Springfield\verb+ +Springvale
\item Nixon\verb+ +Dixon
\end{enumerate}
由于代码以不同的等宽字体显示,其中所有字符的宽度相同,因此单词排列精确。
如果你告诉 LaTeX 使用等宽字体\ttfamily
,内容就会排成一行
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
\begin{enumerate}\ttfamily
\item Tomas\verb+ +Thomas
\item Maine\verb+ +Main
\item Patty\verb+ +Patti
\item Roberts\verb+ +Robertson
\item Springfield\verb+ +Springvale
\item Nixon\verb+ +Dixon
\item MMMMMMMMMMM
\end{enumerate}
\end{document}
因为所有字符和空格(\verb
将字体切换为相同的字体\ttfamily
)具有相同的宽度。
为什么 \verb
这里有错误的工具?
如示例所示,\verb
这是错误的工具,因为它只会将单词与一定数量的文字空格对齐,而不是通过更强大的方法来对齐单词,正如您在如何对齐一行中的单词与下一行中的单词而不使用表格。
这相当于在 MS Word 中按住空格键直到单词大致对齐,而不是使用 TAB 或某些制表方法。
的主要用途\verb
是排版包含特殊字符的文本(通常是计算机代码),这些字符通常需要在 TeX 中转义(\
、#
、_
、^
、&
等%
)。请参阅LaTeX 中的转义字符。它并非旨在被用作对齐其周围的任意文本的方式。
答案2
你的想法有几个缺陷。首先:\verb
使用的字体与普通文本字体不同,并且空间的(正常)宽度也不同:
\sbox0{ }\the\wd0
\sbox0{\texttt{ }}\the\wd0
会产生
第二:“Tomas”的宽度与“Maine”的宽度不同。同样的实验:
\sbox0{Tomas}\the\wd0
\sbox0{Maine}\the\wd0
Tomas
在和之间添加与和Thomas
之间相同数量的空格将不会对齐后面的单词。Maine
Main
如果您想要通过空格完美对齐,则需要使用等宽字体(与 使用的相同\verb
)
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[table]{xcolor}
\usepackage{array}
\begin{document}
\begin{enumerate}\ttfamily
\item Tomas\verb+ +Thomas
\item Maine\verb+ +Main
\item Patty\verb+ +Patti
\item Roberts\verb+ +Robertson
\item Springfield\verb+ +Springvale
\item Nixon\verb+ +Dixon
\end{enumerate}
\end{document}
当然这不是你想看到的。这就是为什么采用这种方法tabto
是有效且必要的,除非你手动操作。
\documentclass{article}
\newcommand{\fl}[2]{\makebox[#1][l]{#2}\ignorespaces}
\begin{document}
\begin{enumerate}
\item \fl{6em}{Tomas} Thomas
\item \fl{6em}{Maine} Main
\item \fl{6em}{Patty} Patti
\item \fl{6em}{Roberts} Robertson
\item \fl{6em}{Springfield} Springvale
\item \fl{6em}{Nixon} Dixon
\end{enumerate}
\end{document}