当我在 LaTeX/XeLaTeX 中微调文档设计时,使用颜色突出显示固定间距的位置和大小有时会很有帮助。例如,我有时会暂时用代码替换代码,\hspace{2pt}
这样\textcolor{red}{\rule{2pt}{2pt}}}
我就能非常清楚地看到 2pt 空间,例如,确保在我确定的 2pt 空间的左侧或右侧没有出现任何意外的空格或多余的空格。
但是我还没有能够在 LaTeX/XeLaTeX 中找到类似的方法来以彩色方式突出显示我在文档中使用的可拉伸胶水。
例如,\textcolor{red}{\hspace{6pt plus 2pt minus 1pt}}
不起作用。同样,\textcolor{red}{\rule{6pt plus 2pt minus 1pt}{2pt}}
不起作用。
如何使用 TeX/LaTeX/XeLaTeX 将颜色应用于可拉伸胶水,以便在微调文档时轻松看到它?
有没有办法给背景(即纸张)着色,使得弹性胶水与其前后的文字相比看起来是有颜色的?
在编译文档时,是否有一种编程方式可以检测可拉伸粘连的值,并自动用与可拉伸粘连\rule
相同宽度的集合替换可拉伸粘连?
答案1
一个可行的解决方案\hspace
(尚未研究\vspace
,但它不会以相同的方式工作)。
编辑也是一个解决方案,\vspace
但它并不总是像那样表现\vspace
。
\documentclass[]{article}
\usepackage{xcolor}
\usepackage[normalem]{ulem}
\usepackage{tikz}
\makeatletter
\newcommand*\hlhspace{\@ifstar\hlhspace@star\hlhspace@nostar}
\newcommand*\hlhspace@nostar[1]{\hlhspace@out{\hspace{#1}}}
\newcommand*\hlhspace@star[1]{\hlhspace@out{\hspace*{#1}}}
\newcommand*\hlhspace@out[1]
{%
\begingroup
\color{red}%
\bgroup
\markoverwith{\rule[-.3ex]{0.2ex}{2ex}}%
\ULon{#1}%
\endgroup
}
\newcommand*\hlvspace{\@ifstar\hlvspace@out\hlvspace@out}
\newcommand*\hlvspace@out[1]
{%
\tikz[remember picture, overlay, baseline=(Begin.base)]
{%
\node[anchor=base, inner sep=0pt, outer sep=0pt] (Begin) {\strut};
}%
\vskip #1\relax
\tikz[remember picture, overlay, baseline=(End.base)]
{%
\node[anchor=base, inner sep=0pt, outer sep=0pt] (End) {\strut};
\draw[red,line width=2ex] (Begin.base) -- (End.base);
}
}
\makeatother
\begin{document}
\hbox to \textwidth{This text \hlhspace{5pt plus 5pt} is justified.}
Text
\hlvspace*{5pt plus 1fill}
More text.
\noindent
more text.
\end{document}
答案2
\documentclass{article}
\usepackage{color}
\begin{document}
\noindent This text {\color{red}\leaders\vrule\hfill} is
justified.\newline And continues here.
\end{document}
变体
\documentclass{article}
\usepackage{color}
\begin{document}
\noindent This text {\color{red}\strut\leaders\vrule\hfill} is
justified.\newline And continues here.
\end{document}
根据评论的要求扩展演示。
\documentclass{article}
\usepackage{color}
\begin{document}
\noindent This text {\color{red}\strut\leaders\vrule\hfill} is
justified.\newline And continues here.
\newcommand\mycoloredglue{%
{\color{red}\strut\leaders\vrule\hskip15pt plus 10pt minus 20pt\relax}%
}
\def\x{x\mycoloredglue}
\def\y{\x\x\x\x\x\x\x\x\x\x}
\def\z{\y\y\y\y\y\y\y\y\y\y}
\z
\end{document}
图像清晰地显示了拉伸/收缩。
有趣的是,使用 110x
而不是 100,可以获得相同数量的行,但是x
's 更加紧凑。
\documentclass{article}
\usepackage{color}
\begin{document}
\noindent This text {\color{red}\strut\leaders\vrule\hfill} is
justified.\newline And continues here.
\newcommand\mycoloredglue{%
{\color{red}\strut\leaders\vrule\hskip15pt plus 10pt minus 20pt\relax}%
}
\def\x{x\mycoloredglue}
\def\y{\x\x\x\x\x\x\x\x\x\x}
\def\z{\y\y\y\y\y\y\y\y\y\y}
\z
\z\y
\end{document}
您是否立即发现第二段x
与第一段相比多了 10 个字?
说实话,有一个地方这不能完全替代非彩色的\hspace
,正如在上面的代码中看到的那样,如果使用
\renewcommand\mycoloredglue{%
{\strut\hskip15pt plus 10pt minus 20pt\relax}%
}
我的意思是段落结束因为 TeX 例程将会\unskip
删除最后的跳过。
但是如果你执行上述操作\renewcommand
然后在上面的代码中发出\z\strut
,\z\y\strut
你会看到它匹配确切地彩色输出。
尝试一下。
因此,除了段落末尾之外,这正是预期的事情。
编辑以上并不是说我的建议真的是“彩色胶水”。它是一种替代品,而且它不是TeX 的胶水:它不会通过 消失\unskip
。但段落结尾本身并不是问题,正如在上面的代码中插入的这个代码所示,
\def\x{x }
\z\x\x\x\x\x\x\x\x\x\x\x\x{\color{red}\strut\leaders\vrule\hfill}
\z\x\x\x\x\x\x\x\x\x\x\x\x
产生
x
在哪里完全相同的位置。