像等宽字体一样对齐单个字符/字形

像等宽字体一样对齐单个字符/字形

你知道大多数字体和排版都有各种宽度的字符/字形吗?就像你比较常规字体一样:

AEIOU
ZXCVB
aeiou
zxcvb

它们并不像固定宽度或等宽字体那样完美地排列:

艾欧  
中兴通讯股份有限公司  
艾尤  
交流群  

我刚刚发现了如何对齐 LaTeX 文档的各个部分(仍在掌握它),并且我很好奇是否可以对齐和居中普通字体的每个字符,以模拟等宽字体的固定宽度字符。

如果仔细观察,实际的字符不一定都是相同的宽度,但字符和它们周围的空白空间的尺寸相同,这让我认为这可能是可能的:
A E I O U
a e i o u
Z X C V B
z x c v b

一些更明显的比较:
1 I ! | .
0 W ?

无论如何,如果可能的话,它对我来说还是很有用的。虽然最终可能变得太丑陋,但如果有人能想到办法的话,我愿意尝试一下。

答案1

我使用制表符堆栈,将输入空格作为制表符(它不会显示在输出中)。我还强制所有列的宽度相等,这将采用矩阵中最宽的字符。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tabstackengine}
\begin{document}
\setstackTAB{ }
\fixTABwidth{T}
\tabbedCenterstack{
A E I O U\\
a e i o u\\
Z X C V B\\
z x c v b\\
1 I ! | .\\
0 W ? — … 
}
\end{document}

在此处输入图片描述

我可以使用负制表符间隙\setstacktabbedgap{-4pt}来将列挤压在一起,但破折号和省略号会重叠:

在此处输入图片描述

答案2

一个简单的解决方案是使用listings具有固定宽度列的包:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{listings}

\lstset{
    columns=fixed,
    literate={—}{{---}}1 {…}{{...}}1
}

\begin{document}
\begin{lstlisting}
A E I O U
a e i o u
Z X C V B
z x c v b

1 I ! | .
0 W ? — …
\end{lstlisting}
\end{document}

在此处输入图片描述

请注意,这listings对 Unicode 字符不太适用(TeX.SX 对此事有几个疑问),所以我literate在这里使用该选项作为快速修复。

相关内容