我的代码是这样的:
\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 可能不是绝对需要的。行首的其他格式化工作可能有效,但我不知道。