我怎样才能强制在行首添加 \hspace?

我怎样才能强制在行首添加 \hspace?

我的代码是这样的:

\setlength{\parindent}{0ex}
\texttt{
x\hspace{1ex}\hspace{1ex}\hspace{1ex}y
\newline
\hspace{1ex}\hspace{1ex}\hspace{1ex}\hspace{1ex}y
}

我希望看到的是:

x   y
    y

我实际看到的是:

x   y
y

我尝试了各种其他插入空格的方法。到目前为止,它们都导致前导空格被忽略。

我也尝试过使用\逐字\全部但是它们吃掉了太多我需要保留的其他命令(上例中未显示)。

我想我可以(在生成 LaTeX 的脚本中)计算每行的前导空格,并使用不同的\parindent价值观。我首先要寻找一些更优雅的东西。

答案1

这里的其他答案解决了如何\hspace通过 在行首使用\hspace*

插入适当宽度的空格的另一种方法是使用\phantom{},它将占用传递给它的参数所需的空间。这将更容易适应您尝试插入的空间量不仅仅是1ex/的整数倍的情况1em

正如 barbarabeeton 所说:提及em应该用于水平空间,也ex用于垂直空间。一个很好的参考是在 LaTeX 中应该使用哪些测量单位?

在此处输入图片描述

\documentclass[border=5pt]{standalone}
\begin{document}
\texttt{\noindent
x\hspace{3ex}y
\newline\noindent
\phantom{x}\hspace{3ex}y
}
\end{document}

答案2

使用带星号的版本\hspace*

答案3

您需要进行一些更改:1)\hspace在行首被忽略,因此您应该使用\hspace*。2)ex是字符的高度x;为了正确对齐,您需要使用0.5em代表等宽字体中字符宽度的数值。3) 您的代码中有一个虚假的空白。

下面的示例展示了带有的代码ex、带有的变体em以及一种tabbing可能同样有趣的方法:

\documentclass{article}

\begin{document}

\noindent\texttt{%
x\hspace{0.5ex}\hspace{0.5ex}\hspace{0.5ex}y
\\
\hspace*{0.5ex}\hspace{0.5ex}\hspace{0.5ex}\hspace{0.5ex}y
}

\noindent\texttt{%
x\hspace{0.5em}\hspace{0.5em}\hspace{0.5em}y
\\
\hspace*{0.5em}\hspace{0.5em}\hspace{0.5em}\hspace{0.5em}y
}

{
\ttfamily
\begin{tabbing}
\=\hspace{2em}\=\kill
\>x \>y \\
\>\> y
\end{tabbing}
}

\end{document}

在此处输入图片描述

答案4

过去一周,我一直在编写一个脚本,将一些特殊的 HTML 转换为 LaTeX 以生成 PDF。此 HTML 包含的代码示例不是 PRE 中的代码,而是 P 中的代码,带有类分配和 CSS,使其看起来像人们期望的代码示例。但是,由于是在 P 中而不是 PRE 中,因此代码示例包括使用颜色和粗体进行强调的标记。我发现可以处理代码示例以转义常见的问题字符,例如下划线……甚至空格。嵌入的格式也很容易转换。结果不是可读性很强的 LaTeX,但这没关系,因为 LaTeX 只是被用作 PDF 的垫脚石。没有人直接编辑 LaTeX。

我最大的问题是代码行以空格开头,而 LaTeX 会吃掉这些空格。(我之所以发现这个问题,是因为这是我的问题。)使用 verbatim 不起作用,因为有嵌入的格式。我也无法让 verbatim 甚至 Verbatim 在表格内工作,而且有许多表格包含带有嵌入格式的代码片段。

经过多次尝试后,我发现每行都可以执行以下操作:

Plain text plain text plain text plain text plain text plain text plain text.\newline {\tt{{\color{white}{}}\ \ \ some code \textit{here}}}\newline {\tt{{\color{white}{}}\ \ \ some \textbf{more} code \textit{here}}}\newline Plain text plain text plain text plain text plain text plain text plain text.

要输入的内容相当多,而且管理所有花括号非常棘手,即使在执行转换工作的脚本中也是如此,所以我创建了一个环境并将该环境应用于每一行......脚本正在执行这项工作,因此输入的内容不像手动输入那么多。

\newenvironment{codeLine} % {\bgroup\tt\bgroup{\color{white}{}}} {\egroup\egroup\newline}

这样,我可以将上述内容简化为:

Plain text plain text plain text plain text plain text plain text plain text.\newline \begin{codeLine}\ \ \ some code \textit{here}\end{codeLine} \begin{codeLine}\ \ \ some \textbf{more} code \textit{here}\end{codeLine} Plain text plain text plain text plain text plain text plain text plain text.

上述内容的编译输出。

我不确定它为什么会起作用,但是当我想到输入一些白色文本作为行的第一个字符时,我发现了它。这在视觉上是可行的,但它会弄乱代码示例的“剪切和粘贴”,所以我省略了初始字符,它仍然防止了初始空格的吞噬。一个简单的 {} 不起作用(至少对我来说不是)。

如果这种风格不好,请见谅。我并不是真正的 LaTeX 专家。大多数情况下,我只是不断尝试,直到某些东西似乎有效……至少在一段时间内有效。如果它只是侥幸有效,并且可能在下一个 LaTeX 编译器版本中消失,更明智的人可能会纠正或警告它。

此外,唯一需要的包是颜色包 \usepackage{xcolor}。\color 可能不是绝对需要的。行首的其他格式化工作可能有效,但我不知道。

相关内容