我有一个包含带下划线文本的 SVG 文件。当我使用 \includesvg 命令(来自 svg 包)包含 svg 时,我收到一个错误,原因是 .pdf_tex 文件包含带有未转义特殊字符的文本。
该图显示变量名称等,因此需要有下划线。
我正在尝试实施该问题答案中的建议:定义“转义下划线”环境,并将转义传递给 svg 包文档中定义的 pretex 参数。
首先,我的标题中包含了 svg 包:
\usepackage{svg}
然后,声明自定义宏并将其传递给 \includesvg 命令:
% The custom \escapeus macro from https://tex.stackexchange.com/questions/20890/define-an-escape-underscore-environment
\makeatletter
\DeclareRobustCommand*{\escapeus}[1]{%
\begingroup\@activeus\scantokens{#1\endinput}\endgroup}
\begingroup\lccode`\~=`\_\relax
\lowercase{\endgroup\def\@activeus{\catcode`\_=\active \let~\_}}
\makeatother
\begin{figure}
\centering % Make it look nice in the center
% Pass in the custom macro to the svg environment
\includesvg[pretex=\escapeus]{mysvgfile}
\end{figure}
当我使用如上所示的代码时,出现几个错误:
File ended while scanning use of \@import ...retex=\escapeus]{mysvgfile}
Missing $ inserted ...retex=\escapeus]{mysvgfile}
Extra }, or forgotten $ ...retex=\escapeus]{mysvgfile}
Extra }, or forgotten $ ...retex=\escapeus]{mysvgfile}
Missing $ inserted \end{figure}
Missing } inserted \end{figure}
Missing } inserted \end{figure}
....
如果有人能告诉我我错过了什么我将不胜感激。
这基本上是对这个问题的后续回答:如何在生成的 .pdf_tex 文件中转义下划线?我尝试用这个部分解决方案来回答,另一个用户建议我将此作为一个新问题提出,因为我无法让它工作并且一年内另一个问题没有任何活动。
答案1
令我惊讶的是,这就像改变一样\includesvg[pretex=\escapeus]{mysvgfile}
简单\escapeus{\includesvg{mysvgfile}}
。
\escapeus
期望传递一些 TeX 作为 #1,然后对其进行操作以删除下划线。通过向其输入一个空参数,可以看到{}
上面的错误被删除,只有在遇到下划线时才会被原始错误替换。但是,该\escapeus
命令可以处理传递命令的整个结果\includesvg
。
答案2
您还可以使用参数inkscapelatex=false
。这将告诉 LaTeX 不要渲染文本。
因此这应该可行:
\documentclass{article}
\usepackage{svg}
\begin{document}
\begin{figure}
\centering
\includesvg[inkscapelatex=false, width=\linewidth]{pic}
\caption{caption}
\label{img:label}
\end{figure}
\end{document}
来源:包装文档