我的 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
-encoudingT1
。
但是,为了显示标签,您可能更喜欢包裹showkeys
。