LaTeX 如何计算边距对我来说已经显得有些复杂了。为了改进我的回答,这个问题关于如何让图形横跨整篇论文,我再次尝试去理解它——在阅读了 TH 的回答后这个问题我认为我明白了左边距是如何计算的:
\hoffset
+ 1英寸\oddsidemargin
++\leftskip
我的预期是,如果我跳过左边的给定数量,我最终会到达真正的纸张边距。然而,显然这行不通:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[3]
\hskip\dimexpr -\hoffset-1in-\oddsidemargin-\leftskip\relax\rule{\paperwidth}{4pt}
\lipsum[3]
\end{document}
得出以下结果:
因此,纸张左侧边距和命令输出之间仍然有一些空间\rule
。那么还缺少多少长度呢?
答案1
段落分隔符后,LaTeX 会\parindent
在下一个段落的开头插入 。要取消此操作\parindent
,您应该\noindent
在下一个段落的开头插入 。
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[3]
\noindent\hskip\dimexpr -\hoffset-1in-\oddsidemargin-\leftskip\relax\rule{\paperwidth}{4pt}
\lipsum[3]
\end{document}
答案2
只是为了扩展 Marc 的精彩答案。您还应该检查偶数页或奇数页,因为即使使用,您的代码parindent0pt
也会在偶数页上失败,而应使用:
\documentclass{article}
\usepackage{lipsum}
\parindent0pt
\begin{document}
\makeatletter
\ifodd\c@page
\lipsum[3]
\hskip\dimexpr -\hoffset-1in-\oddsidemargin-\leftskip\relax\rule{\paperwidth}{4pt}
\lipsum[3]
\else
\the\leftskip
\newpage
\lipsum[3]
\hskip\dimexpr -\hoffset-1in-\evensidemargin-\leftskip\relax\rule{\paperwidth}{4pt}
\lipsum[3]
\fi
\makeatother
\end{document}
答案3
这适用于单面和双面文档。需要运行两次 LaTeX
\documentclass[twoside]{article}
\usepackage{lipsum}
\newcounter{rulecounter}
\makeatletter
\newcommand*\longrule[1][4pt]{%
\refstepcounter{rulecounter}\label{longrule-label@\therulecounter}%
\par\noindent
\ifodd\pageref{longrule-label@\therulecounter}
\hskip\dimexpr-\hoffset-1in-\oddsidemargin-\leftskip\relax
\else
\hskip\dimexpr-\hoffset-1in-\evensidemargin-\leftskip\relax
\fi%
\rule{\paperwidth}{#1}\par}
\makeatother
\begin{document}
\lipsum[3]
\longrule
\lipsum[3]
\newpage
\lipsum[3]
\longrule[6pt]
\lipsum[3]
\end{document}