为了验证布局模板,我使用了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}