等宽字体不尊重空格?

等宽字体不尊重空格?

为什么 True Type 字体会合并空格?有什么方法可以阻止这种情况?我需要容易地在单词之间添加等于空格宽度的空格(对于等宽字体,所有字母的空格宽度应该相同)。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{inconsolata}
\begin{document}
\catcode`_=11
\par\texttt{this is monospaced text    Where  are  the  spaces  ?    !!!}%
\par\texttt{this_is_monospaced_text____Where__are__the__spaces__?____!!!}
\end{document}​

更新:

使用\obeyspaces\verb有效但某物似乎破坏了间距:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{fancyvrb}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}%
\matrix (m) [matrix of nodes, every node/.style={font=\ttfamily},%
    row 1/.style={text width=7em, align=left,font=\ttfamily},
    row 2/.style={text width=7em, align=left,font=\ttfamily},]
    {
        \verb+A  B  C  D +\\
        \verb+Ac Ad Be Cf+\\
    };
\end{tikzpicture}
\end{document}​

输出看上去好像没有使用 monspace 字体。


更新2:

奇怪的行为:?和 !!!! 之间的额外空格由于某种原因破坏了 tikz 矩阵(删除 tikzpicture 才能使其工作):

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{fancyvrb}
\usetikzlibrary{matrix}

\begin{document}


\catcode`_=11
\par\obeyspaces{\texttt{this is monospaced text    Where  are  the  spaces  ?    !!!}}%
\par\texttt{this_is_monospaced_text____Where__are__the__spaces__?____!!!}
\catcode`_=8

\begin{tikzpicture}%
\matrix (m) [matrix of nodes, every node/.style={font=\ttfamily},%
    row 1/.style={text width=7em, align=left,font=\ttfamily},
    row 2/.style={text width=7em, align=left,font=\ttfamily},]
    {
        \verb+A  B  C  D +\\
        \verb+Ac Ad Be Cf+\\
    };
\end{tikzpicture}
\end{document}​

答案1

\Verb另一种处理简短逐字文本的方法是使用fancyvrb包;我添加了obeytabs选项并用于tabsize恢复里面的对齐\matrix(字符使用制表符分隔):

显然,当我将代码从编辑器复制到此网站时,选项卡会丢失。您需要在下面的代码中使用A(tab)B(tab)C(tab)D和,其中代表编辑器中的选项卡:Ac(tab)Ad(tab)Be(tab)Cf(tab)

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{tikz}
\usetikzlibrary{matrix}

\fvset{obeytabs}

\begin{document}

\begin{tikzpicture}%
\matrix (m) [matrix of nodes, every node/.style={font=\ttfamily},%
    row 1/.style={text width=7em, align=left},
    row 2/.style={text width=7em, align=left}]
    {
\Verb[tabsize=2]+A  B   C   D+\\
\Verb[tabsize=1]+Ac Ad  Be  Cf+\\
    };
\end{tikzpicture}

\end{document}​

在此处输入图片描述

使用包\lstinline中的命令listings,无需使用制表符;简单的空格将按预期运行:

\documentclass{article}
\usepackage{listings}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{tikzpicture}%
\matrix (m) [matrix of nodes, every node/.style={font=\ttfamily},%
    row 1/.style={text width=7em, align=left},
    row 2/.style={text width=7em, align=left}]
    {
\lstinline+A  B  C  D+\\
\lstinline+Ac Ad Be Cf+\\
    };
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

\texttt只是设置字体。它不会改变 TeX 看待空格的方式。如果您想要那样,那么您需要使用某种逐字宏或环境。或者摆弄空格的 catcode(不推荐!)

答案3

您可以使用包listings或环境verbatim。您将在下面的 MWE 中看到一个示例。表格是否更适合您的问题?

%http://tex.stackexchange.com/questions/70007/monospaced-fonts-not-respecting-spaces
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{listings}
\begin{document}
\par\texttt{this is monospaced text    Where  is  the  spaces  ?    !!!}

\begin{verbatim}
this is monospaced text    Where  is  the  spaces  ?    !!!
\end{verbatim}

\begin{lstlisting}[basicstyle=\ttfamily]
this is monospaced text    Where  is  the  spaces  ?    !!!
\end{lstlisting}

\begin{lstlisting}[basicstyle=\ttfamily,showspaces=true]
this is monospaced text    Where  is  the  spaces  ?    !!!
\end{lstlisting}

\end{document}​

答案4

既然有更简单的解决方案/破解方法可以解决这个问题,为什么要把事情弄复杂呢?例如,只需将所有额外的预期空格(本例中为两个,因此“XX”是两个占位符)替换为

\textcolor{white}{XX}

其中“白色”应为背景颜色。您可以多次应用搜索和替换操作来快速完成此操作。

相关内容