为什么代码没有产生预期的结果?

为什么代码没有产生预期的结果?

这是我的问题 感谢这个\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之间相同数量的空格将不会对齐后面的单词。MaineMain

如果您想要通过空格完美对齐,则需要使用等宽字体(与 使用的相同\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}

在此处输入图片描述

相关内容