为什么使用 lualatex/pdflatex 和包 url/xurl 时 \url、\path 和 \texttt 中的反斜杠看起来不同?

为什么使用 lualatex/pdflatex 和包 url/xurl 时 \url、\path 和 \texttt 中的反斜杠看起来不同?

考虑这个最小的例子:

\documentclass[varwidth]{standalone}
%\usepackage{xurl}
\usepackage{url}
\begin{document}
\path{C:\} (path)\\
\url{C:\} (url)\\
\texttt{C:\textbackslash} (texttt)
\end{document}

根据我是否使用pdflatexlualatex编译文档,以及是否使用包urlxurl,我得到以下结果:

在此处输入图片描述

为什么反斜杠有时会变细?我期望的是 lua-url 组合。但我想使用该xurl包的换行功能。

这是一个错误、预期行为、还是我做错了什么?

答案1

\textbackslash是一个依赖于编码的命令,默认的 OT1 编码没有反斜杠,因此$\backslash$在这种情况下默认为(通常更细)。cmtt 字体专为逐字设计,尽管在 LaTeX 中名义上被归类为 OT1 编码,但它在标准位置包含大多数 ascii 字符。因此,使用 url 包\url并使用\pathcmtt ,您可以获得更重的匹配其他字符的宽度。\\

无论如何,你应该避免使用 OT1 编码,如果你添加

\usepackage[T1]{fontenc}

然后使用 T1 编码并且\textbackslash不会使用数学模式回退。

xurl由于我目前还不清楚的原因,因为它是一个非常薄的包装器,使得数学模式回退也url适用于这些情况。 (我可能会稍后编辑这个答案...)\url

使用 luatex 和 url 类似于使用 T1 编码,在这种情况下编码是 TU(Unicode)并且\textbackslash只使用当前字体的反斜杠,因此在这三种情况下您都会得到拉丁现代 tt 字体。

并且再次xurl强制数学模式解释 \ 如上所述,因此即使在 luatex 中您也会得到 cmsy 数学模式反斜杠。


如果复制了一个设置,将使用原始包的\数学模式:url\xurl

\documentclass{article}
%\usepackage{xurl}
\usepackage{url}

\makeatletter

\def\UrlBreaks{%
  \do\/%
  \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l%
     \do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z%
  \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L%
     \do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z%
 \do\*\do\-\do\~\do\'\do\"\do\-%
 \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\do=\do/\do.\do:%
}
%




%\usepackage[T1]{fontenc}
\begin{document}
\showoutput
\path{C:\} (path)\\
\url{C:\} (url)\\
\texttt{C:\textbackslash} (texttt)
\end{document}

哦,这是一个错误,它会从所有列表中xurl删除\\

这将给出 tt 反斜杠xurl

\documentclass{article}
\usepackage{xurl}


\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks\do\\}%


%\usepackage[T1]{fontenc}
\begin{document}
\showoutput
\path{C:\} (path)\\
\url{C:\} (url)\\
\texttt{C:\textbackslash} (texttt)
\end{document}

相关内容