假设我们需要创建一个由两条水平线及其下方的名称组成的合约签名块。main.tex
:
\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\geometry{verbose,tmargin=2cm,bmargin=3cm,lmargin=2cm,rmargin=2cm}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\begin{document}
\noindent\makebox[.45\textwidth]{\hrulefill} \hfill\makebox[.45\textwidth]{\hrulefill}
\noindent\makebox[.45\textwidth][l]{Director 1} \hfill\makebox[.45\textwidth][l]{Director 2}
\end{document}
输出:
一切都很好。但是当我将代码移到单独的文件中signature.tex
并将对它的引用放入主文件中时:
\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\geometry{verbose,tmargin=2cm,bmargin=3cm,lmargin=2cm,rmargin=2cm}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\begin{document}
\input{signature.tex}
\end{document}
第二个人的名字向左移动:
出了什么问题?如何修复?在 Windows XP 上使用 TeX Live 2017。
答案1
因为\input
是在输入内容的末尾添加一个空格,所以这里就Director 1....Director 2
一行。
您可以通过两种方式避免这种情况:
任何一个%
在输入文件的最后一行添加signature.tex
,例如:
\noindent\makebox[.45\textwidth]{\hrulefill} \hfill\makebox[.45\textwidth]{\hrulefill}
\noindent\makebox[.45\textwidth][l]{Director 1} \hfill\makebox[.45\textwidth][l]{Director 2}%
或者\unskip
在命令后直接添加\input
:
\documentclass[12pt]{article}
\usepackage[a5paper,showframe]{geometry}
\geometry{verbose,tmargin=2cm,bmargin=3cm,lmargin=2cm,rmargin=2cm}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\begin{document}
\input{signature.tex}\unskip
\end{document}
哈拉尔德解释得很好在这里的评论中:
最后一行是否以换行符结尾并不重要。重点是,TeX 将文件视为由多行组成的。作为标记化过程的一部分,
\endlinechar
在每行末尾插入一个字符,其代码为 的值(除非该行以注释或控制序列结尾)。