语境:我正在尝试使用 Asymptote 在半透明lstlisting
环境中绘制解释性箭头和注释。在此过程中,我遇到了 Asymptote 和包之间的奇怪交互transparency
,我将其简化为一个最小的工作示例。我使用的是 LuaLaTeX,但也可以在 pdfLaTeX 中重现。
由于我无法理解的原因,Asymptoteasy
环境有时(但并非总是)会几乎完全禁用透明度里面和外部以及块的前后\begin{asy} ... \end{asy}
。以下是 MCVE 示例。
\documentclass{article}
\usepackage{asymptote}
\usepackage{transparent}
\begin{document}
\section{Before Asymptote}
{\transparent{0.1}Ghost X}
\section{In Asymptote}
\begin{asy}
if(false){ //TOGGLE THIS
label("x");
}else{
draw((0cm,0)--(1cm,0));
}
\end{asy}
\section{After Asymptote}
{\transparent{0.1}Ghost X}
\end{document}
有一个if
带切换开关的语句,目前是false
。当设置为 时false
,我在绘图前后得到了幽灵般的文字asy
:
但是,如果我将开关设置为true
,则不会:
请注意,前后的文本都不再透明。
我已测试过的变体:
- 标签的内容无关紧要。
- 包裹
asy
在figure
或minipage
不包含疾病。 - 添加也不行
\pdfpageattr{/Group <</S /Transparency /I true /CS /DeviceRGB>>}
建议添加序言或任何其他咒语这里。 - TeXStudio 的嵌入式查看器和 KDE 的 Okular 都显示这一点,因此这不是 PDF 查看器的特殊之处。
- 我也刚刚尝试过
texpreamble("\usepackage{transparent}");
,并且label("{\transparent{0.1}x}");
得到了两个切换的相同结果,并且 $x$ 不透明。 - 当您将切换设置为
true
并label("x");
同时draw((0cm,0)--(1cm,0), opacity(0.1));
执行if-
时,您会得到相同的结果(前后透明度均被禁用),但画出的线是透明的。
为什么只有一些渐近线图形会触发幽灵般的超距作用并像这样炸毁其他一切?我该如何解决这个问题?
答案1
我仍然不知道为什么会发生这种情况,但是这里有一个针对 MCVE 的解决方法:
- 使用
asypictureB
包而不是asymptote
。(相应地,将所有asy
环境更改为asypicture
、和\begin
,\end
并确保在 后添加强制参数\begin{asypicture}
。) - 将此行添加
settings.outformat="pdf";
到 s 的开头asypicture
。否则它将被编译为eps
,这可能会导致特殊的间距。
代码如下:
\documentclass{article}
\usepackage{asypictureB}
\usepackage{transparent}
\begin{document}
\section{Before Asymptote}
{\transparent{0.1}Ghost X}
\section{In Asymptote}
\begin{asypicture}{name=foo}
settings.outformat = "pdf";
if(true){ //TOGGLE THIS
label("x");
}else{
draw((0cm,0)--(1cm,0));
}
\end{asypicture}
\section{After Asymptote}
{\transparent{0.1}Ghost X}
\end{document}
结果:
我唯一能想到的原因是,该asymptote
包与 LaTeX 代码的交互比该asypictureB
包更紧密。这允许该asymptote
包自动复制主文档中使用的字体和包,但显然它也允许出现这样的问题。