这是一个更大问题的一部分,但我似乎停留在琐碎阶段。
我想让装有图片的棺材相对于纸张居中。我希望使用棺材杆来实现这一点,但似乎无法实现。如果我知道图片的宽度,我就可以做到这一点,因此,如果需要,我可以检查宽度,然后使用结果。但是,我想知道是否有一种更简单的方法不需要这样做。
请注意,此示例必然会产生坏框,任何令人满意的答案也必然会产生坏框。
\begin{filecontents}{pic.tex}
\documentclass{standalone}
\begin{document}
\begin{tikzpicture}
\shade [left color=Cerulean, right color=Cerulean, middle color=MidnightBlue] (0,0) rectangle (200mm,10mm);
\end{tikzpicture}
\end{document}
\end{filecontents}
\documentclass[a4paper,x11names,svgnames,dvipsnames]{article}
\usepackage{geometry,standalone,tikz,xcoffins,calc}
\begin{document}
\NewCoffin\TestCoffin
\SetHorizontalCoffin\TestCoffin{\input{pic}}
This works:\par
\noindent
\TypesetCoffin\TestCoffin[l,vc](-100mm+.5\textwidth,0pt)
\bigskip
This doesn't:\par
{\centering
\TypesetCoffin\TestCoffin[hc,vc]\par}
\bigskip
Can I centre the coffin \emph{without} knowing the width of the picture?
\end{document}
我预计,如果我在页面中央,使用hc
会使棺材居中。由于单面文章的默认边距相等,我预计这也会将图片置于纸张中央。
也就是说,我期望从上述两个代码示例中获得相同的结果。但我不仅没有得到相同的结果,而且我实际上不知道我得到了什么。\TypesetCoffin
不会忽略\centering
并且也不会忽略hc
,但我完全不清楚它到底对它们做了什么。(或者它是否\TypesetCoffin
在做。)
我不明白什么?
答案1
棺材的放置使用杆子,特别是杆子hc
,其工作方式是减少盒子的宽度,使得杆子位于盒子的左边缘(正如 TeXbook 中所详述的,盒子的参考点始终位于封闭材料基线的左侧)。
在这个特殊情况下(hc
极点),这会导致棺材缩小到原来的一半大小,左半部分突出。指示\centering
TeX 将剩余的右半部分居中。一旦在图片上放置一些标记,就会变得更加清晰。正如我们预期的那样,150 毫米处的标记(右半部分的一半)现在位于页面的中心。
\begin{filecontents}{pic.tex}
\documentclass{standalone}
\begin{document}
\begin{tikzpicture}
\shade [left color=Cerulean, right color=Cerulean, middle color=MidnightBlue] (0,0) rectangle (200mm,10mm);
\foreach \len in { 0, 50, ..., 200 }
\draw[red,thick] (\len mm,10mm) -- (\len mm,0) node[below,overlay] {\len mm};
\end{tikzpicture}
\end{document}
\end{filecontents}
\documentclass[a4paper,x11names,svgnames,dvipsnames]{article}
\usepackage{geometry,standalone,tikz,xcoffins,calc,showframe}
\begin{document}
\NewCoffin\TestCoffin
\SetHorizontalCoffin\TestCoffin{\input{pic}}
This works:\par
\noindent
\TypesetCoffin\TestCoffin[l,vc](-100mm+.5\textwidth,0pt)
\bigskip
This doesn't:\par
{\centering
\TypesetCoffin\TestCoffin[hc,vc]\par}
\bigskip
Can I centre the coffin \emph{without} knowing the width of the picture?
\end{document}
答案2
\linewidth
您可以将其绘制在宽度为 的\hbox
via 的中心\hss
:
\begin{filecontents}{pic.tex}
\documentclass{standalone}
\begin{document}
\begin{tikzpicture}
\shade [left color=Cerulean, right color=Cerulean, middle color=MidnightBlue] (0,0) rectangle (200mm,10mm);
\end{tikzpicture}
\end{document}
\end{filecontents}
\documentclass[a4paper,x11names,svgnames,dvipsnames]{article}
\usepackage{geometry,standalone,tikz,xcoffins,calc}
\begin{document}
\NewCoffin\TestCoffin
\SetHorizontalCoffin\TestCoffin{\input{pic}}
Can I centre the coffin \emph{without} knowing the width of the picture?
\noindent
\hbox to\linewidth{\hss\TypesetCoffin\TestCoffin[l,vc]\hss}
\end{document}
它不会产生任何有关水平盒子过满的警告。但是,它不会考虑左右边距差异。如果需要,可以适应这种情况。
答案3
这是一个基于棺材的解决方案我希望 Henri Menke 能写出答案,而 Henri Menke 现在已经写好了答案,。它旨在作为该答案的补充。
这包括非工作示例(hc,vc
标有棺材把手)以及工作示例(标有l,vc
和hc,vc
把手),这些示例不依赖于了解棺材的宽度或事先计算。它只是作为棺材排版的一部分进行计算。
\begin{filecontents}{pic.tex}
\documentclass{standalone}
\begin{document}
\begin{tikzpicture}
\shade [left color=Cerulean, right color=Cerulean, middle color=MidnightBlue] (0,0) rectangle (200mm,10mm);
\end{tikzpicture}
\end{document}
\end{filecontents}
\documentclass[a4paper,x11names,svgnames,dvipsnames]{article}
\usepackage{geometry,standalone,tikz,xcoffins,calc}
\begin{document}
\NewCoffin\TestCoffin
\SetHorizontalCoffin\TestCoffin{\input{pic}}
\MarkCoffinHandle\TestCoffin[hc,vc]{magenta}
\MarkCoffinHandle\TestCoffin[l,vc]{magenta}
Can I centre the coffin \emph{without} knowing the width of the picture?
This works:\par
\noindent
\TypesetCoffin\TestCoffin[l,vc](-.5\CoffinWidth\TestCoffin+.5\textwidth,0pt)
\bigskip
This doesn't:\par
{\centering
\TypesetCoffin\TestCoffin[hc,vc]\par}
\end{document}