svg 包 \includesvg 在 svg 中带有下划线

svg 包 \includesvg 在 svg 中带有下划线

我有一个包含带下划线文本的 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}

来源:包装文档

相关内容