我一直在尝试编写一个简单的新命令,以使一段代码更加灵活和可读(下面是 MWE)。在其中,我需要能够将一个字符串传递给包含井号的新命令#
。在这件事上我别无选择……我必须使用一个自动生成并由外部维护的文件,该文件的文件名中包含#1
或。#2
我尝试过但似乎不起作用的方法:
- 转义参数中的主题标签(即
{a \#1.jpg}
- 对参数 #1 进行 \detokenize{}
- 对作为参数传递的字符串进行 \detokenize{}
梅威瑟:
\documentclass{article}
\usepackage{graphicx,grffile}
\usepackage{hyperref}
\graphicspath{
{ABSOLUTE/PATH/TO/GRAPHICS}
}
\begin{document}
\newcommand{\Customjpg}[2]{\label{#2}\includegraphics[keepaspectratio,width=0.49\textwidth]{"#1"}}
\Customjpg{a \#1.jpg}{Fig:R1a}
\end{document}
答案1
您可以在本地更改命令中 # 的 catcode:
\documentclass{article}
%
\usepackage{graphicx}
\begin{document}
\makeatletter
\newcommand\Customjpg{\begingroup\catcode`\#=12\relax\@Customjpg}
\newcommand\@Customjpg[1]{\endgroup\includegraphics{#1}}
\Customjpg{a#1}
\end{document}
请注意,您不能\Customjpg
在另一个命令的参数中使用它。
答案2
您可以使用
\edef\zz{\string#}
\includegraphics{a \zz1.png}
获得非特殊的#
(\#
是\chardef
排版的标记#
,但不会扩展到#
文件名等中的标记)。