我对此进行了编辑,以便更清楚地说明我的问题。我有一些很棒的建议,但它们都指向一些可以正常工作的东西。
我正在尝试定义一个宏\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
(默认厚度\fboxrule
为1pt
)。如果该图像的尺寸减小,则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
宏来显示它们。