如何在 \path 或 \texttt 环境中转义百分号 (%)?

如何在 \path 或 \texttt 环境中转义百分号 (%)?

如何逃脱百分号%)在\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

\pathurl直接支持百分号字符,除非它在其他宏的参数中使用。\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运行正常,问题的更新部分拼错了命令:\hostspathvs. \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}

结果带有 \urldef 和脚注中的路径

答案2

这是一种依赖于纯文本技术的方法。

\documentclass{article}
\usepackage{url}
\begingroup
\catcode`\%=13
\gdef\mypath{\path{%SystemRoot%\system32\drivers\etc\hosts}}
\endgroup

\begin{document}
%Hi!\footnote{\path{%SystemRoot%\system32\drivers\etc\hosts}}
Hi!\footnote{\mypath}
\end{document}

在此处输入图片描述

相关内容