为什么 \hskip 和 \hspace* 会产生不同程度的偏移

为什么 \hskip 和 \hspace* 会产生不同程度的偏移

例如,我注意到\hskip 20pthspace*{20pt}产生的水平偏移长度不一样。

例如,考虑一下

\documentclass{book}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{color}
\usepackage{tikz}

\newlength\drop % To drop the start of the paragraph below the top of the picture.
\setlength\drop{10pt}

\begin{document}
\thispagestyle{empty}

\begin{tikzpicture}
  \shade node[preaction={fill=black,opacity=.5,},fill=green!30, inner sep=5mm]
  {\parbox{0.87\textwidth}{\fontsize{12}{13}\selectfont
    \vspace{\drop}%
    \hangindent=\dimexpr 0.2\textwidth+\columnsep\relax
    \hangafter=-4
    \noindent\llap{\raisebox{\dimexpr \drop+0.6\baselineskip-\height}[0pt][0pt]% overlap indentation
      {\includegraphics[width=0.2\textwidth]{example-image-b}}\hspace{\columnsep}}% 
      \hskip 20pt \textbf{\textcolor{red}{TITLE}}  \\[-5pt]~\smallskip\\
      \hspace*{20pt} \textbf{\textcolor{red}{TITLE}}  \\[-5pt]~\smallskip\\
      %\hspace{20pt} \textbf{\textcolor{red}{TITLE}}  \\[-5pt]~\smallskip\\
      \textbf{\textit{\lipsum[4]}}}} ;
\end{tikzpicture}

\vskip 20pt
\LARGE

************************* \vskip 0pt
\noindent A sentence. \hskip 20pt (hskip 20pt) \\
A sentence. \hspace*{20pt} (hspace*{20pt}) \\
A sentence. \hspace{20pt} (hspace{20pt}) 
\end{document}

产生输出

在此处输入图片描述

正如您在 tikzpicture 和句子中看到的那样,水平偏移量略有不同,具体取决于是否使用hskip或。 (顺便说一句,和hspace*似乎产生相同的测量偏移量。)hspace*hspace

问题:有人能解释这种差异吗?我认为,由于 20pt=20pt,\hskip 20pt并且\hspace*{20pt}两者都会产生相同的偏移。但显然,它们不会。

谢谢。

答案1

ptin后面的空格\hskip会被删除,但 括号后面的空格不会被删除\hspace

\documentclass{article}
\begin{document}
X\hskip 20pt X

X\hspace{20pt}X

X\hspace{20pt} X

\end{document}

在此处输入图片描述

答案2

后面的空格{20pt}算作空格。后面的空格20pt不算。

至于为什么,右括号{20pt}终止参数的读取,因此后面的空格被视为印刷空格。另一方面,在20pt消化时,空格在读取长度参数时被消化,因此不再充当印刷空格(空格是长度规范中允许的终止符)。如果你把它写成\hskip 20pt{},那么尾随空格将再次被消化为印刷空格。

\documentclass{book}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{color}
\usepackage{tikz}

\newlength\drop % To drop the start of the paragraph below the top of the picture.
\setlength\drop{10pt}

\begin{document}
\thispagestyle{empty}

\begin{tikzpicture}
  \shade node[preaction={fill=black,opacity=.5,},fill=green!30, inner sep=5mm]
  {\parbox{0.87\textwidth}{\fontsize{12}{13}\selectfont
    \vspace{\drop}%
    \hangindent=\dimexpr 0.2\textwidth+\columnsep\relax
    \hangafter=-4
    \noindent\llap{\raisebox{\dimexpr \drop+0.6\baselineskip-\height}[0pt][0pt]% overlap indentation
      {\includegraphics[width=0.2\textwidth]{example-image-b}}\hspace{\columnsep}}% 
      \hskip 20pt \textbf{\textcolor{red}{TITLE}}  \\[-5pt]~\smallskip\\
      \hspace*{20pt}\textbf{\textcolor{red}{TITLE}}  \\[-5pt]~\smallskip\\
      %\hspace{20pt} \textbf{\textcolor{red}{TITLE}}  \\[-5pt]~\smallskip\\
      \textbf{\textit{\lipsum[4]}}}} ;
\end{tikzpicture}

\vskip 20pt
\LARGE

************************* \vskip 0pt
\noindent A sentence. \hskip 20pt (hskip 20pt) \\
A sentence. \hspace*{20pt}(hspace*{20pt}) \\
A sentence. \hspace{20pt}(hspace{20pt}) 
\end{document}

在此处输入图片描述

相关内容