考虑以下 MWE。
\documentclass{article}
\usepackage{textpos}
\newcommand{\insertname}{%
\begin{textblock}{2}(5,-0.5)
\bfseries{\jobname.tex}
\end{textblock}
}
\begin{document}
\insertname
Some text.
\end{document}
这会将 LaTeX 文件的名称放在输出 PDF 的顶部。但是,xpatch
如果可能的话,我希望使用 来自动处理。这样我就不需要手动将宏插入正文中,而是在序言中处理它。我尝试过依次使用\xpretocmd
with\maketitle
和\titlepage
as 参数,但不起作用。有什么建议可以告诉我该怎么做吗?
\documentclass{article}
\usepackage{textpos}
\usepackage{xpatch}
\newcommand{\insertname}{%
\begin{textblock}{2}(5,-0.5)
\bfseries{\jobname.tex}
\end{textblock}
}
\xpretocmd{\maketitle}{\insertname}{}{}
%\xpretocmd{\titlepage}{\insertname}{}{}
\begin{document}
%\insertname
Some text.
\end{document}
tohecz 的答案看起来不错,但不适用于简单的字母示例。
\documentclass[11pt]{letter}
\address{Sender address}
\signature{Some person}
\usepackage{fancyhdr}
\fancyhf{}
\fancyhead[RO,LE]{\jobname\quad\the\day.~\the\month.~\the\year}
\pagestyle{fancy}
\begin{document}
\begin{letter}{Recipient address}
\opening{Dear Sir/Madam,}
Some stuff
\closing{Thanking you}
\end{letter}
\end{document}
答案1
像这样
\documentclass[a4paper]{memoir}
% picture loaded to be able to use 'units in \put
\usepackage{eso-pic,picture}
\AddToShipoutPictureBG*{
% change reference point to page upper left
\AtPageUpperLeft{
\put(1cm,-1cm){\textbf{\jobname}}
}
}
% this is just to have some contents
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
\AddToShipoutPictureBG*
刚刚添加到下一个已发货页面。删除后*
它将添加到所有页面。
居中版本
\documentclass[a4paper]{memoir}
% picture loaded to be able to use 'units in \put
\usepackage{eso-pic,picture,calc}
\AddToShipoutPictureBG*{
% change reference point to page upper left
\AtPageUpperLeft{
\put(\oddsidemargin+1in+0.5\textwidth,-1cm){%
\makebox[0pt][c]{\textbf{\jobname}}}
}
}
% this is just to have some contents
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
答案2
你需要使用 \maketitle
如果您希望\insertname
执行该操作,则
但是,如果在文档中使用,那么简单的解决方案\AtBeginDocument{\insertname}
将不起作用,因为。\maketitle
\maketitle
\newpage
\maketitle
如果您不打算在文档中使用,则需要更复杂的解决方法。如果您打算使用它,那么\@maketitle
需要修补的宏是:
\makeatletter
\xpatchcmd{\@maketitle}{\newpage}{\newpage\insertname}{}{\ddt}
\makeatother
so\insertname
在 之后执行\newpage
。
如果您希望它独立于的存在\maketitle
,唯一可靠的方法似乎是使用合适的页面样式。
\documentclass{article}
\usepackage{xpatch}
\makeatletter
\def\ps@faheem{%
\let\@mkboth\@gobbletwo
\def\@oddhead{\hfil\textbf{\jobname.tex}}%
\def\@oddfoot{\reset@font\hfil\thepage\hfil}%
\let\@evenhead\@empty\let\@evenfoot\@oddfoot
}
\AtBeginDocument{\thispagestyle{faheem}}
\xpatchcmd{\maketitle}{plain}{faheem}{}{}
\makeatother
\begin{document}
\title{A}\author{B}
\maketitle
Some text.
\end{document}
如果您发表评论,\maketitle
您将获得相同的标题。
为了完整性,这里有一个不同的策略atbegshi
:
\documentclass{article}
\usepackage{atbegshi,picture}
\newcommand{\insertname}{%
\put(\dimexpr\oddsidemargin+1in+\textwidth,-1cm){%
\makebox[0pt][r]{\textbf{\jobname.tex}}%
}%
\gdef\insertname{}%
}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{\insertname}%
}
\begin{document}
\title{A}\author{B}
\maketitle
\end{document}
修改放置参数;通过此设置,文件名的右边缘与右边距齐平,基线距纸张顶部 1 厘米。
答案3
我是否遗漏了什么,或者您可以像我经常做的那样简单地使用标准标题?
\usepackage{fancyhdr}
\fancyhf{}
\fancyhead[RO,LE]{\jobname\quad\the\day.~\the\month.~\the\year}
\pagestyle{fancy}
这会将\jobname
和编译日期插入到每页的页眉中。如果您的页眉中已有内容,并且想要将其放在稍高的位置,则可以使用以下构造:
\usepackage{fancyhdr}
\usepackage{mathtools}
\newcommand\jobinhead{\jobname\quad\the\day.\the\month.\the\year}
\fancyhead[RO]{%
blabla%
\smash{\raisebox{\baselineskip}{\llap{\jobinhead}}}%
}
\fancyhead[LE]{%
\leavevmode
\smash{\raisebox{\baselineskip}{\rlap{\jobinhead}}}%
blabla%
}
\pagestyle{fancy}
如果不想加载mathtools
,可以通过\llap{abc}
和来模拟\rlap{abc}
\hbox to 0pt{\hss abc}
\hbox to 0pt{abc\hss}