我可以把宽度未知的超大棺材放在中央吗?

我可以把宽度未知的超大棺材放在中央吗?

这是一个更大问题的一部分,但我似乎停留在琐碎阶段。

我想让装有图片的棺材相对于纸张居中。我希望使用棺材杆来实现这一点,但似乎无法实现。如果我知道图片的宽度,我就可以做到这一点,因此,如果需要,我可以检查宽度,然后使用结果。但是,我想知道是否有一种更简单的方法不需要这样做。

请注意,此示例必然会产生坏框,任何令人满意的答案也必然会产生坏框。

\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极点),这会导致棺材缩小到原来的一半大小,左半部分突出。指示\centeringTeX 将剩余的右半部分居中。一旦在图片上放置一些标记,就会变得更加清晰。正如我们预期的那样,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您可以将其绘制在宽度为 的\hboxvia 的中心\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,vchc,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}

基于棺材的解决方案和演示句柄

相关内容