如何逃脱百分号(%
)在\path{...}
还是在\texttt{...}
?
例如,编译此代码失败,因为%
符号开始注释:
\path{%SystemRoot%\system32\drivers\etc\hosts}
转义符号的结果%
:
\path{\%SystemRoot\%\system32\drivers\etc\hosts}
是:
\%SystemRoot\%\system32\drivers\etc\hosts
如何解决这个问题?
更新
问题是由 引起的\footnote
。最小不是工作示例:
\documentclass{article}
\usepackage{url}
\begin{document}
Hi!\footnote{%SystemRoot%\system32\drivers\etc\hosts}
\end{document}
答案1
\path
包url
直接支持百分号字符,除非它在其他宏的参数中使用。\path
(或\url
)在读取其参数之前和之后更改特殊字符的类别代码。
\documentclass{article}
\usepackage{url}
\usepackage[T1]{fontenc}% for \textbackslash inside \texttt
\begin{document}
\path{%SystemRoot%\system32\drivers\etc\hosts}
\texttt{\%SystemRoot\%\textbackslash system32\textbackslash drivers%
\textbackslash etc\textbackslash hosts}
\end{document}
\texttt
也可以使用,但特殊字符比较麻烦。百分号字符可以通过\%
(或\@percentchar
,需要\makeatletter
)生成。反斜杠可以在文本模式下通过 给出\textbackslash
。字体编码修复了打字机字体系列中关于反斜杠的T1
过时编码。OT1
脚注中的路径
\urldef
运行正常,问题的更新部分拼错了命令:\hostspath
vs. \hostpath
。此外,里面有两个不可见的 Unicode 字符hosts
:U+200B ZERO WIDTH SPACE 和 U+200C ZERO WIDTH NON-JOINER。更正后的版本,更正了宏名称并删除了垃圾字符:
\documentclass{article}
\usepackage{url}
\urldef\hostpath\path{%SystemRoot%\system32\drivers\etc\hosts}
\begin{document}
% \vspace*{\fill} % only for smaller image for answer
Hi!\footnote{\hostpath}
\end{document}