边距中的“Q”和“A” - 未对齐

边距中的“Q”和“A” - 未对齐

我已经为页边空白处的字母定义了一个命令,如下所示(使用 marginnote 因为 marginpar 根本不起作用):

\newcommand{\sideletter}[1]{\marginnote{\Huge\bf\sffamily\color{orange} #1}}

我知道由于字体/大小不同,垂直对齐可能会出现问题,在发出命令时我已执行以下操作来解决问题:

\sideletter{Q}[-1mm]

\sideletter{A}[1mm]

这似乎刚好解决了垂直问题。但我似乎无法水平对齐 - A 只是轻微地更靠右。

示例图片:

例子

有人知道如何解决这个问题吗?我尝试过使用 hfill 和 centering,但似乎没有任何效果。

以下是最小工作示例:

\documentclass{article}
\usepackage{lipsum}
\usepackage{marginnote}
\newcommand{\sideletter}[1]{\marginnote{\Huge\bf\sffamily #1}}
\setlength\parindent{0pt}
\begin{document}
\reversemarginpar
\sideletter{Q}
\lipsum[6]

\sideletter{A}
\lipsum[6]
\end{document}

我认为在这个 MWE 中平均能量损失错位可能不太明显,但仍然存在。也许字体选择确实有一些与之有关,但不是全部。

答案1

我会以稍微不同的方式来处理这个问题。在我看来,你的“Q”和“A”可以包装在一个list环境中,这让我立刻想到了enumitem包。

在此处输入图片描述

command我没有使用 ,而是environment使用了 。我个人觉得这更可取,因为它以后可能会简化全局更改 - 例如,您可能希望向环境添加数字,或者其他装饰。看看你的想法 - 如果不合适,也许其他人会有其他选择。

\documentclass{article}
\usepackage[showframe=true]{geometry}
\usepackage{xcolor}     % for colour
\usepackage{enumitem}   % for customizing lists
\usepackage{lipsum}     % for sample text

\newenvironment{question}{\begin{itemize}[leftmargin=0mm]\item[\vbox to -5pt{\vss\hbox{\Huge\bf\sffamily\color{orange} Q}\vss}]}
{\end{itemize}}
\newenvironment{answer}{\begin{itemize}[leftmargin=0mm]\item[\vbox to -5pt{\vss\hbox{\Huge\bf\sffamily\color{orange} A}\vss}]}
{\end{itemize}}

\begin{document}

\begin{question}
\lipsum[1]
\end{question}
\begin{answer}
\lipsum[1]
\end{answer}
\end{document}

如果您打算\Huge用于question环境,则可以使用以下内容进行定义:

\newenvironment{question}{\begin{itemize}[leftmargin=0mm]\item[\Huge\bf\sffamily\color{orange} Q]\Huge}
  {\end{itemize}}

答案2

无论采用哪种对齐方法(例如,\marginpar列表等),最终对齐都是通过将某些材料推向某个框的边缘来实现的。只要所推材料不包含任何空白,就可以进行正确的对齐。

对于单个字符,可能人们不会想到这一点,但实际上确实存在,这只是所用字体的一个特性。单个字符位于边界框中,就 TeX 而言,这样的字符只不过是一个矩形。TeX 不知道组成这个字符的墨水是否在这个框的边界内、是否突出或是否留下一些空白。所以这里唯一的补救措施是直观地查看字体的作用并进行纠正。

\Huge\bf\sffamily    \vrule A\vrule Q\vrule

会给你

在此处输入图片描述

并且如您所见,字母周围的空白量不同。您可以测量它,然后使用以下方法手动纠正它

Q\kern-1pt

或任何必要的内容。(或者,如果您尝试左对齐,则在另一侧)。

答案3

 \newcommand{\sideletter}[1]{\marginnote{\Huge\bf\sffamily\color{orange} #1}}

此处的字母将作为固定宽度 parbox 中段落的开头,因此它将齐平左边在该框中,字母与正文之间的距离将取决于字母的宽度和侧边距。这也是\bf一个已弃用的 LaTeX2.09 命令,最好使用bfseries,最后\color在 parbox 的开头使用可能会(通常会)导致垂直错位,因为它添加了那是什么节点到垂直列表的开头,这会影响垂直对齐计算。最好使用\textcolor{orange}{#1}\noindent\color{orange}#1,以便颜色更改进入段落的第一行,而不是第一行之前。

由于您希望字母与段落开头紧密相关,因此我不会在此处使用边距/边注。要么使用第一个答案中建议的列表标签,要么使用如下所示的方框。

\documentclass{article}
\usepackage{lipsum}
\usepackage{color}
\newcommand{\sideletter}[1]{%
\par\makebox(0,0)[r]{\Huge\bfseries\sffamily\textcolor{red}{#1}%
  \hspace{4pt}%
}\ignorespaces}
\setlength\parindent{0pt}
\begin{document}

\sideletter{Q}
\lipsum[6]

\sideletter{A}
\lipsum[6]
\end{document}

答案4

这个似乎与 marginpar 一起工作:

\documentclass[11pt]{article}
\usepackage{xcolor,blindtext}
\newcommand*{\noPlace}{\hrule height0pt width 0pt}
\reversemarginpar
\newcommand{\QA}[2]{%
  \mbox{}\leavevmode\marginpar{\textcolor{orange}{%
    \noPlace\sffamily\Huge#1}}%
    {\noPlace#2}\par}
\setlength{\marginparwidth}{0.2in}%
\setlength{\parindent}{0pt}

\begin{document}
\QA{Q}{\blindtext}

\QA{A}{\blindtext}

\end{document}

在此处输入图片描述

相关内容