为什么 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}
其中“白色”应为背景颜色。您可以多次应用搜索和替换操作来快速完成此操作。