颜色影响布局?

颜色影响布局?

为了验证布局模板,我使用了eso-pic。在此示例中,所有框都应从左侧 20 毫米处开始,但只要我使用,\color...put \color...put框的 X 坐标就会延迟。

%\documentclass[]{letter} same
\documentclass[]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{picture,eso-pic} 
\setlength\fboxsep{0pt}

\AddToShipoutPicture*{ \AtPageUpperLeft{%
\multiput(20mm,0)(0,-.01\paperheight){100}{\line(0,-1){.005\paperheight}}
\put(20mm,-85mm){\colorbox{red!25}{\framebox(30mm,10mm){A}}}
\put(20mm,-100mm){\colorbox{blue!25}{\framebox(30mm,10mm){B}}}
\color{lightgray}{\put(20mm,-65mm){\colorbox{green!25}{\framebox(30mm,10mm){C}}}}
\color{red}{\put(20mm,-50mm){\colorbox{pink!25}{\framebox(30mm,10mm){D}}}} % 2 following rows with color break X coord.
\put(20mm,-35mm){\colorbox{yellow!25}{\framebox(30mm,10mm){E}}}
}}

\begin{document} 
\begin{letter}{To} \opening{Hi,} 
\textbf{ALL} boxes should start at 20mm from the left side \closing{bye} \end{letter} 
\end{document}

我该如何解决?

移除\color{red}修复了本例中的问题。

--
作为后续问题:我创建了自己的命令,以便轻松控制应使用相应颜色绘制哪个标准。遗憾的是,它们也会悄无声息地弄乱布局。线条工作正常,但后续框被推迟了。

我该如何解决这个问题并且避免冗余并保持抽象?

\documentclass[]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{picture,eso-pic,etoolbox} 
\setlength\fboxsep{0pt}

\newtoggle{printA}
\toggletrue{printA}
\newcommand \colorA {red}
\newcommand \printA [1]{\iftoggle{printA}{{\color{\colorA}{#1}}}{}}

\AddToShipoutPicture*{ \AtPageUpperLeft{%
\put(20mm,-85mm){\colorbox{yellow!25}{\framebox(30mm,10mm){A}}}
\printA{\multiput(20mm,0)(0,-.01\paperheight){100}{\line(0,-1){.005\paperheight}}}
\printA{\multiput(25mm,0)(0,-.01\paperheight){100}{\line(0,-1){.005\paperheight}}}
\put(20mm,-100mm){\colorbox{blue!25}{\framebox(30mm,10mm){B}}}
}}

\begin{document} 
\begin{letter}{To} \opening{Hi,} 
\textbf{ALL} boxes should start at 20mm from the left side \closing{bye} \end{letter} 
\end{document}

我确实对 Latex 代码的确定性感到迷茫!我能做些什么来确保颜色没有任何副作用,或者换句话说,不会默默地弄乱布局?

答案1

把 放在\color更安全的地方,在 里面\put,而不是在 前面。影响位置需要注意的\color这不是我的错

另一种方法(更适合您编辑的问题)是让您的\printA命令像其他图片模式命令一样工作,并删除它们周围的空白。额外的空格实际上是来自源代码行尾的单词间空格(因此另一种方法是%在每行末尾使用)。\put通常会通过发出来删除任何悄悄出现的空格,\unskip但该\color命令会插入一个那是什么空格后的节点会阻止\unskip工作。此定义使其\printA本身删除前面的空格并忽略后面的空格。

\newcommand \printA [1]{%
\ifhmode\unskip\fi
\iftoggle{printA}{{\color{\colorA}{#1}}}{}%
\ignorespaces}

原答案代码:

\documentclass[]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{picture,eso-pic} 
\setlength\fboxsep{0pt}

\AddToShipoutPicture*{ \AtPageUpperLeft{%
\multiput(20mm,0)(0,-.01\paperheight){100}{\line(0,-1){.005\paperheight}}
\put(20mm,-85mm){\colorbox{red!25}{\framebox(30mm,10mm){A}}}
\put(20mm,-100mm){\colorbox{blue!25}{\framebox(30mm,10mm){B}}}
\put(20mm,-65mm){\color{lightgray}\colorbox{green!25}{\framebox(30mm,10mm){C}}}
\put(20mm,-50mm){\color{red}\colorbox{pink!25}{\framebox(30mm,10mm){D}}} % 2 following rows with color break X coord.
\put(20mm,-35mm){\colorbox{yellow!25}{\framebox(30mm,10mm){E}}}
}}

\begin{document} 
\begin{letter}{To} \opening{Hi,} 
\textbf{ALL} boxes should start at 20mm from the left side \closing{bye} \end{letter} 
\end{document}

相关内容