![有人能解释一下如何使用 adjustbox 包中的“\Smallestside”类型的宏吗?](https://linux22.com/image/479208/%E6%9C%89%E4%BA%BA%E8%83%BD%E8%A7%A3%E9%87%8A%E4%B8%80%E4%B8%8B%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20adjustbox%20%E5%8C%85%E4%B8%AD%E7%9A%84%E2%80%9C%5CSmallestside%E2%80%9D%E7%B1%BB%E5%9E%8B%E7%9A%84%E5%AE%8F%E5%90%97%EF%BC%9F.png)
我试图将甘特图放入投影机的幻灯片中。如果甘特图的大小发生变化,我不想不断更改 resizebox 的尺寸。我读过 adjustbox 包,第 11 页的文档似乎表明有一些宏可以自动扩展到宽度或长度的较大值或较小值。有四个,\smallestside、\largestside、\Smallestside、\Largestside,但没有任何示例。我本以为作为宏,您只需将要缩放的内容放入其中即可。但那行不通。
有人用过这些吗?我在论坛上搜索了每个术语,但没有找到结果……我愿意听取其他想法,但令人沮丧的是,这些宏似乎完全符合我的要求,但我不知道如何使用它们!
底线是,无论我做什么,我都不想改变它。我希望甘特图能够最大限度地填充可用的空白空间,无论是宽度还是长度,而不改变长宽比。
输出如下所示(采用我所有的 REAL 格式):
这里有一个 MWE(它消除了大部分额外的格式,但大小正确且仍然显示问题)。
\documentclass[xcolor = {usenames,dvipsnames,table},beamer]{standalone}
\usepackage{adjustbox}
\usepackage{pgfgantt}
\begin{document}
%--------------------------------------------------------
\begin{frame} {Timeline}
\begin{ganttchart}
[
y unit chart = 0.7cm,
expand chart=\textwidth,
time slot format=isodate,
y unit title=0.5cm,
title height=0.8,
bar height = 0.4,
bar label font = \tiny,
milestone label font = \tiny,
milestone height = 0.4,
]
{2020-01-0}{2020-08-31}
\gantttitle{Project Timeline}{244} \\
\gantttitlecalendar*{2020-01-0}{2020-08-31}{month=shortname} \\
% Elements
\ganttbar {Model Development} {2020-01-01} {2020-03-15}\\
\ganttbar {Model Verification} {2020-02-20} {2020-03-31}\\
\ganttmilestone {Test Model} {2020-03-31} \\
\ganttbar {Data Integration} {2020-03-20} {2020-04-15}\\
\ganttbar {Scada Integration} {2020-04-10} {2020-04-30}\\
\ganttmilestone {Full-Scale Model} {2020-04-30} \\
\ganttbar {DCC Integration} {2020-05-01} {2020-05-20}\\
\ganttbar {DCC-Parallel Operations} {2020-05-20} {2020-06-03}\\
\ganttmilestone {DCC-Full Operations} {2020-06-04} \\
\ganttbar {Strategic Applications} {2020-06-01} {2020-07-15}
\end{ganttchart}
\end{frame}
%--------------------------------------------------------
\end{document}
答案1
如果我没有误解你的话,答案很简单,我只是添加了具有最大宽度和最大高度的调整框,然后将其更改expand chart=
为定义的长度:
\documentclass[xcolor = {usenames,dvipsnames,table},beamer]{standalone}
\usepackage{adjustbox, graphicx}
\usepackage{pgfgantt}
\begin{document}
%--------------------------------------------------------
\begin{frame} {Timeline}
\begin{adjustbox}{max width=\textwidth, max height=\textheight}
\begin{ganttchart}
[ y unit chart = 5mm, expand chart=15cm, time slot format=isodate, y
unit title=.7cm, title height=0.8, bar height = 0.4, bar label font = \tiny,
milestone label font = \tiny, milestone height = 0.4, ]
{2020-01-00}{2020-08-31}
\gantttitle{Project Timeline}{244} \\
\gantttitlecalendar*{2020-01-0}{2020-08-31}{month=shortname} \\
% Elements
\ganttbar {Model Development} {2020-01-01} {2020-03-15}\\
\ganttbar {Model Verification} {2020-02-20} {2020-03-31}\\
\ganttmilestone {Test Model} {2020-03-31} \\
\ganttbar {Data Integration} {2020-03-20} {2020-04-15}\\
\ganttbar {Scada Integration} {2020-04-10} {2020-04-30}\\
\ganttmilestone {Full-Scale Model} {2020-04-30} \\
\ganttbar {DCC Integration} {2020-05-01} {2020-05-20}\\
\ganttbar {DCC-Parallel Operations} {2020-05-20} {2020-06-03}\\
\ganttmilestone {DCC-Full Operations} {2020-06-04} \\
\ganttbar {Strategic Applications} {2020-06-01} {2020-07-15}\\
\ganttbar {Dummy1 and a terribly long text} {2020-07-10} {2020-08-13}\\
\ganttbar {Dummy2} {2020-07-11} {2020-08-23}\\
\ganttbar {Dummy3} {2020-07-12} {2020-08-30}\\
\ganttbar {Dummy4} {2020-07-10} {2020-08-13}\\
\ganttbar {Dummy5} {2020-07-11} {2020-08-23}\\
\ganttbar {Dummy6} {2020-07-12} {2020-08-30}\\
\end{ganttchart}
\end{adjustbox}
\end{frame}
%--------------------------------------------------------
\end{document}
我最多加了 6 行,即使你把时间线扩展到 10 月底,它仍然会适合框架。但是,条形标签字体会变得太小。
答案2
我认为你问错了对象。pgfgantt
仅expand chart
提供水平拉伸,没有垂直拉伸。此外,使用\smallestside
(比如)似乎不合适,因为您的目标是分别将某个组合的固定宽度和高度设置为(比如)\textwidth
和\textheight
。\smallestside
返回任何一个 \width
或者 \totalheight
所讨论对象的最小值。因此,您不能用它来固定宽度(例如),因为结果可能是\totalheight
。同样,您也不能用它来固定高度(例如),因为结果可能是\width
。并且,根据用例,\width
和\totalheight
可能彼此无关。
为了展示\smallestside
和朋友们所做的事情,这里是他们的定义:
\def\smallestside{\ifdim\width<\totalheight \width\else\totalheight\fi}%
\def\largestside{\ifdim\width>\totalheight \width\else\totalheight\fi}%
\def\Smallestside{\ifdim\Width<\Totalheight \Width\else\Totalheight\fi}%
\def\Largestside{\ifdim\Width>\Totalheight \Width\else\Totalheight\fi}%
请注意,它们都是返回(或扩展为)长度的宏。以下是示例:
\documentclass{article}
\usepackage{adjustbox,graphicx}
\begin{document}
\begin{adjustbox}{width=\smallestside}
\includegraphics[width=\textwidth,height=50pt]{example-image}
\end{adjustbox}
\end{document}
环境的内容adjustbox
包含一个图像,其宽度为\textwidth
,高度为50pt
。很容易确定\textwidth
远大于50pt
(事实上,在上面的例子中就是如此)。345pt
由于 中只包含图像adjustbox
,因此其内容将具有\width
和。因此,将导致,因此\textwidth
\totalheight
50pt
\smallestside
50pt
\begin{adjustbox}{width=\smallestside}
\includegraphics[width=\textwidth,height=50pt]{example-image}
\end{adjustbox}
将产生一个具有宽度of - (= ) 和(= )50pt
中较小的一个和一个\width
\textwidth
\totalheight
50pt
高度~ 7.27pt
(= 50pt
x 50pt
/ \textwidth
= 50pt
x 50pt
/ 345pt
= 50pt
x 0.145
)。
相似地,
\begin{adjustbox}{height=\smallestside}
\includegraphics[width=50pt,height=\textheight]{example-image}
\end{adjustbox}
会产生一个图像,高度of - (= ) 和(= = )50pt
中较小的一个和一个\width
50pt
\totalheight
\textheight
550pt
宽度~ 4.54pt
(= 50pt
x 50pt
/ \textheight
= 50pt
x 50pt
/ 550pt
= 50pt
x 0.09
)。
\smallestside
以下是通过条件(测试)的可能用例:
\documentclass{article}
\usepackage{adjustbox,graphicx}
\usepackage{showframe}% For reference
\begin{document}
\noindent % For reference
\includegraphics[width=.5\textwidth,height=50pt]{example-image}
\bigskip
\begin{adjustbox}{height={\ifdim\smallestside=\height 100pt\else\height\fi}}
\includegraphics[width=.5\textwidth,height=50pt]{example-image}
\end{adjustbox}
\end{document}
第一幅图供参考,宽度设置为\textwidth
( width=.5\textwidth
) 的一半。在 内adjustbox
,我们可以height
通过判断 是否\smallestside
与 匹配来调整\height
。在示例中,如果\height
最小,我们将其设置为100pt
( 其原始大小的两倍50pt
)。这应该会将图像从.5\textwidth
( 水平方向,或,width
键值 ) 拉伸到\textwidth
。这就是第二幅图显示的内容。