我已经为页边空白处的字母定义了一个命令,如下所示(使用 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}