创建 \includegraphics 副本时出现问题

创建 \includegraphics 副本时出现问题

我对此进行了编辑,以便更清楚地说明我的问题。我有一些很棒的建议,但它们都指向一些可以正常工作的东西。

我正在尝试定义一个宏\embedimage,它实际上是原始宏的副本\includegraphics。我这样做是因为我必须 \renewcommand \includegraphics支持 Pandoc 推出的某些功能。无论我如何处理,我似乎都无法让新宏嵌入没有框架的图像。

原始详细信息如下:

首先,我使用 LaTeX 的方式有点不标准,而且不受我控制。我试图影响一个长期以来从 Powerpoint 文件生成书籍的环境。我设法让它们尝试Markdown,但是该组织肯定还没有为全面使用 TeX 做好准备。

话虽如此,我在序言中还是提到了以下内容:

---
geometry: "left=25mm,right=25mm,top=25mm,bottom=25mm"
output: pdf_document
documentclass: extarticle
fontsize: 12pt
monofont: "Courier New"
toc: true
include-before: |
    ![](./media/Slide1.png){ width=100% }
    \pagebreak
header-includes: |
    \iffalse
    The following packages and configurations accomplish the following:
        % wrapfig is used to allow inset images with runaround
        % Support building indices
        % Set title to nothing so we can override
        % Reset footnote numbering on each page
        % Support TTF and other fonts and arbitrary font sizes
        % Support inline LaTeX style mathematics notation
        % Reconfigure slide images to include borders
    \fi
    \usepackage{wrapfig}
    \usepackage[nonewpage]{imakeidx}
    \makeindex[intoc, title=]
    \usepackage[perpage]{footmisc}
    \usepackage{fontspec}
    \setmainfont{Times New Roman}
    \usepackage{amsmath}
    \usepackage[export]{adjustbox}
    \let\includegraphicsbak\includegraphics
    \renewcommand*{\includegraphics}[2][]{\includegraphicsbak[frame,#1]{#2}}
    \newcommand{\embedimage}[1][]{\includegraphicsbak[frame=0pt, #1]}
---

请注意,我重新定义\includegraphics为框架图像,因为组织习惯于在每页开头使用带边框的幻灯片。我真正应该做的是定义一个\slide执行此操作的宏,但这样他们就会在他们使用的 Markdown 预览工具中丢失幻灯片的预览。Pandoc 在转换嵌入图像时使用,\includegraphics我还没有找到一种方法来自定义从 Markdown 到该宏的转换。

这让我想到了我的实际问题。我在文档其他页面上嵌入了其他图像。我正在努力寻找一种方法来防止框架\adjustbox也出现在这些图像上。我最近的尝试可以在上面的序言中看到……但它不起作用。

我也尝试过在重新定义\renewcommand甚至加载之前包含以下内容\usepackage[export]{adjustbox}

\let\embedimage\includegraphics

这也不起作用。

我的理解是,\let\embedimage\includegraphics在重新定义之前使用将有效地创建 的评估副本\includegraphics\embedimage但它仍然带有框架。

有什么建议么?

答案1

提供可选参数的顺序\includegraphics(加载时\usepackage[export]{adjustbox}) 很重要,因为元素的应用是按该顺序执行的。因此,

\renewcommand{\includegraphics}[2][]{\includegraphicsbak[frame,#1]{#2}}

您在图像周围插入一个frame(默认厚度\fboxrule1pt)。如果该图像的尺寸减小,则frame也会随之减小。对于大图像,这可能会使frame完全不可见。要了解为什么会出现这种情况,请考虑以下最小(LaTeX)示例:

在此处输入图片描述

\documentclass{article}

\usepackage[export]{adjustbox}

\begin{document}

\setlength{\fboxrule}{20pt}% Adjust thickness of default frame rule

\includegraphics[frame,width=5cm]{example-image}

\includegraphics[width=5cm,frame]{example-image}

\end{document}

在两种情况下,frame现在都是可见的,但第一个例子比第二个例子要薄,因为frame指定了缩放(width=5cm,这会导致图像尺寸减小)。在第二个示例中frame插入缩放,从而产生预期的粗20pt边框。

由于可选参数的顺序很重要,因此将frame最后一个参数放在:

\usepackage[export]{adjustbox}
\let\includegraphicsbak\includegraphics
\renewcommand*{\includegraphics}[1][]{\includegraphicsbak[#1,frame]}
\newcommand{\embedimage}[1][]{\includegraphicsbak[#1]}

设置frame=0pt实际上也不需要,所以我删除了它。在更新\includegraphics\embedimage(正如您已经做的那样)中,也没有正式需要抓取第二个(强制)参数。

答案2

感谢所有建议的答案,但这似乎是从 Pandoc 生成 TeX 并嵌入 Markdown 图像的具体内容。

为了解决我的具体问题,我将 Pandoc Markdown 序言更改为:

    \usepackage{wrapfig}
    \usepackage[nonewpage]{imakeidx}
    \makeindex[intoc, title=]
    \usepackage[perpage]{footmisc}
    \usepackage{fontspec}
    \setmainfont{Times New Roman}
    \usepackage{amsmath}
    \usepackage[export]{adjustbox}
    \newcommand*{\slide}[2][]{\includegraphics[frame,#1]{#2}}
    \let\embedimage\includegraphics

我意识到这\embedimage不再是必要的,但我已经引用了它。修复的第二部分是在文档中执行此操作:

\iffalse
![](./media/Slide2.png){ width=100% }
\fi
\slide{./media/Slide2.png}

这使得 Visual Studio Code 中的 Markdown 预览能够运行(Markdown 图像标签可以工作),但它们会被从 LaTeX 输出中丢弃,从而允许我使用自定义\slide宏来显示它们。

相关内容