_ 字符但不在数学模式下

_ 字符但不在数学模式下

我的 TeX voodoo 对 WIP 文档有一些特殊行为。其中之一是在遇到 marginpars 时打印标签和文件名。只要标签和文件名包含字符,就会中断此操作_

虽然\includegraphics{file_name}\label{foo_bar}显然没问题,但一个简单的

\begin{document}
[... has to appear after \begin{document} ...]
\let\somelabel\label
\def\label#1{%
    \somelabel{#1}%
    #1
}

在第一次出现包含字符的 a\label{foo_bar}时,会中断。我尝试了一些方法让 latex 替换,但问题似乎是递归的。:-)!Missing $ inserted\label__

显而易见的解决方案是不使用包含_- 字符的标签和文件名,但这对我当前的项目来说不可行。我可以让 latex 不被_- 字符绊倒吗?

答案1

这应该可以实现你想要的效果:

\documentclass{article}

\usepackage{lmodern}
\usepackage[T1]{fontenc}

\begin{document}

\def\stripone#1#2\endstripone{#2}
\def\abc#1{\begingroup\escapechar-1 \expandafter\string\csname#1\endcsname\endgroup}

\abc{123} % output: 123

\abc{1_2_3} % output: 1_2_3

\end{document}

想法:

  • \csname blabla\endcsname制作控制序列\blabla
  • \string\blabla逐字打印\blabla
  • \escapechar-1\消失
  • \expandafter是否能以正确的顺序进行扩展
  • \begingroup ... \endgroup因此改变\escapechar是局部的
  • _我们需要在字体表中的正确位置包含适当的字体。我更喜欢lmodern-encouding T1

但是,为了显示标签,您可能更喜欢包裹showkeys

相关内容