传递给新命令的字符串中的转义哈希标记

传递给新命令的字符串中的转义哈希标记

我一直在尝试编写一个简单的新命令,以使一段代码更加灵活和可读(下面是 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排版的标记#,但不会扩展到#文件名等中的标记)。

相关内容