在 \resizebox 内定位图形环境的问题

在 \resizebox 内定位图形环境的问题

我正在编写一个文档,其中包含从 Inkscape 导出的图形(pdf+latex 格式)。这些图形使用figure包含所有文本标签的环境和一个\includegraphics从 pdf 文件导入图形部分的宏。

默认情况下,这些图形使用与文档其余部分相同的字体,这对我来说太大了。为了解决这个问题,我先将图形放大,然后使用 将其缩小到原始大小\resizebox。这不会改变图形的大小,只会改变用于呈现文本标签的字体大小,这很完美。

然而,有一个奇怪的小问题我无法解决。所有图形都向右移动,并且比直接包含figure在 中的图形(即没有用环境包装)略小\resizebox

下面是一个揭示此行为的测试文档:

\documentclass{article}
\usepackage[pdftex]{graphicx}
\usepackage{color}


\begin{document}
\begin{figure}[!t]
  \def\svgwidth{1.5\textwidth}%
  \resizebox{\textwidth}{!}{%
    \input{testfig.pdf_tex}%
  }
  \caption{Test with ``figure'' environment.}
\end{figure}

\begin{figure}[!t]
  \resizebox{\textwidth}{!}{%
    \includegraphics[width=1.5\textwidth]{testfig.pdf}%
  }
  \caption{Test without ``figure'' environment.}
\end{figure}

\vbox{}

\end{document}

从 Inkscape 导出的文件testfig.pdf_tex(已删除注释):

\begingroup
  \makeatletter
  \providecommand\color[2][]{%
    \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}
    \renewcommand\color[2][]{}%
  }
  \providecommand\transparent[1]{%
    \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}
    \renewcommand\transparent[1]{}%
  }
  \providecommand\rotatebox[2]{#2}
  \ifx\svgwidth\undefined
    \setlength{\unitlength}{778.02519531pt}
  \else
    \setlength{\unitlength}{\svgwidth}
  \fi
  \global\let\svgwidth\undefined
  \makeatother
  \begin{picture}(1,0.36433855)%
    \put(0,0){\includegraphics[width=\unitlength]{testfig.pdf}}%
    \put(0.51462818,0.17761502){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{Some text}}}%
  \end{picture}%
\endgroup

显示结果的屏幕截图。

答案1

问题出在行尾字符上,例如\providecommand\rotatebox[2]{#2}。当 中未使用这些行尾字符时\resizebox,这些行尾字符将被忽略,因为 TeX 处于垂直模式;而\resizeboxTeX 内部处于水平模式,它们算作空格。

\begin{figure}[!t]
  \def\svgwidth{1.5\textwidth}%
  \begingroup\endlinechar=-1
  \resizebox{\textwidth}{!}{%
    \input{testfig.pdf_tex}%
  }\endgroup
  \caption{Test with ``figure'' environment.}
\end{figure}

设置后\endlinechar=-1我们至少可以在持续时间内忽略它们\input

您还可以定义

\newcommand{\noendlineinput}[1]{\begingroup
  \endlinechar=-1 \input{#1}\endgroup}

并说

\begin{figure}[!t]
  \def\svgwidth{1.5\textwidth}%
  \resizebox{\textwidth}{!}{%
    \noendlineinput{testfig.pdf_tex}%
  }
  \caption{Test with ``figure'' environment.}
\end{figure}

您应该检查输入文件中从未使用行尾来分隔picture环境中的单词。

相关内容