考虑这个最小的例子:
\documentclass[varwidth]{standalone}
%\usepackage{xurl}
\usepackage{url}
\begin{document}
\path{C:\} (path)\\
\url{C:\} (url)\\
\texttt{C:\textbackslash} (texttt)
\end{document}
根据我是否使用pdflatex
或lualatex
编译文档,以及是否使用包url
或xurl
,我得到以下结果:
为什么反斜杠有时会变细?我期望的是 lua-url 组合。但我想使用该xurl
包的换行功能。
这是一个错误、预期行为、还是我做错了什么?
答案1
\textbackslash
是一个依赖于编码的命令,默认的 OT1 编码没有反斜杠,因此$\backslash$
在这种情况下默认为(通常更细)。cmtt 字体专为逐字设计,尽管在 LaTeX 中名义上被归类为 OT1 编码,但它在标准位置包含大多数 ascii 字符。因此,使用 url 包\url
并使用\path
cmtt ,您可以获得更重的匹配其他字符的宽度。\
\
无论如何,你应该避免使用 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}