我\texttt{}
经常在里面使用下划线来表示 python 函数,并且我已经厌倦了用 转义每个下划线\_
。我尝试了以下内容来重新定义\texttt{}
命令以允许未转义的下划线,基于以下答案:
由于某种原因,它不起作用。如果我直接在文本中写入命令内的三行,它就会起作用。有什么想法可以解释为什么它不起作用吗?
\usepackage[T1]{fontenc}
\let\oldtexttt\texttt #'Copy' command
\renewcommand{\texttt}[1]{
\catcode`_ 12\relax
\oldtexttt{#1}
\catcode`_ 8\relax}
\texttt{hello_world}
答案1
您应该为 Python 函数定义自己的命令,并对其应用字符替换。
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\pyf}{m}
{
\texttt
{
\tl_set:Nn \l_tmpa_tl { #1 }
\tl_replace_all:Nen \l_tmpa_tl { \char_generate:nn { `_ } { 8 } } { \_ }
\tl_use:N \l_tmpa_tl
}
}
\cs_generate_variant:Nn \tl_replace_all:Nnn { Ne }
\ExplSyntaxOff
\begin{document}
\pyf{my_var}
\texttt{my\_var}
\end{document}
由于编程环境_
中的特殊性expl3
,所以有一点复杂,所以我们需要用其通常的“下标”含义来生成下划线。
你的方法行不通,因为当你吸收论点时,类别代码就被冻结了。你可以这样做不是在类别代码更改之前吸收参数
\makeatletter
\newcommand{\pyf}{%
\begingroup\catcode`_=12
\pyf@
}
\newcommand{\pyf@}[1]{\texttt{#1}\endgroup}
\makeatother
但这将不是\pyf
如果在另一个命令的参数中使用,则可以工作。
我在一开始展示的代码没有这个缺陷。