在下面的代码中,我想_
显示一个简单的字母。我该如何实现呢?
% Source : http://forum.mathematex.net/latex-f6/forcer-le-retour-a-la-ligne-dans-texttt-t13246.html#p127511
\documentclass{article}
\makeatletter
\newcommand\breakabletexttt[1]{\texttt{\breakable@texttt#1\@nil}}
\def\@gobble@fi#1\fi{\fi#1}
\def\breakable@texttt#1#2\@nil{%
#1\hspace{0pt plus 0.1pt minus 0.1pt}%
\ifx\relax#2\relax
%
\else
\@gobble@fi\breakable@texttt#2\@nil
\fi
}
\makeatother
\begin{document}
\breakabletexttt{rangerangerangerange_rangerangerange_rangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerange}
\end{document}
答案1
这是@unbonpetit 解决方案中的一个通用技巧:
% start a group and change the catcodes
\def\foo{%
\begingroup
\catcode`\_=12\relax
\foowitharg}
% do the work and ends the group
\def\foowitharg#1{%
\bfseries
#1%
\endgroup}
但如果你不想将宏分成两个,你可以使用 eTeX 的扩展\scantokens
:
\def\foo#1{%
\textbf{\scantokens{\catcode`\_=12\relax#1}}}
都可以。
也就是说你可以将定义修改为:
\documentclass{article}
\makeatletter
\newcommand\breakabletexttt[1]{\begingroup\ttfamily
\scantokens{\catcode`\_12\makeatletter\breakable@texttt#1\@nil}%
\endgroup}
\def\@gobble@fi#1\fi{\fi#1}
\def\breakable@texttt#1#2\@nil{%
#1\hspace{0pt plus 0.1pt minus 0.1pt}%
\ifx\relax#2\relax
%
\else
\@gobble@fi\breakable@texttt#2\@nil
\fi
}
\makeatother
\begin{document}
\breakabletexttt{rangerangerangerange_rangerangerange_rangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerange}
\end{document}
答案2
您必须更改 catcode_
前您阅读了宏的参数(请仔细阅读我发给您的文档)。
\documentclass{article}
\makeatletter
\newcommand\breakabletexttt{\begingroup\catcode`\_12 \breakabletexttt@i}
\newcommand\breakabletexttt@i[1]{\texttt{\breakable@texttt#1\@nil}\endgroup}
\def\@gobble@fi#1\fi{\fi#1}
\def\breakable@texttt#1#2\@nil{%
#1\hspace{0pt plus 0.1pt minus 0.1pt}%
\ifx\relax#2\relax
%
\else
\@gobble@fi\breakable@texttt#2\@nil
\fi
}
\makeatother
\begin{document}
\breakabletexttt{rangerangerangerange_rangerangerange_rangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerangerange}
\end{document}
答案3
您可以使用以下方式更改角色的 catcode
\catcode`_=11
在这种情况下,11
因为这是字母的类别代码。通常_
是 catcode 8
(即下标的类别)。你可以用
\catcode`_=8
您可以在以下位置阅读更多相关信息TeX 按主题分类