定义一个用于改变线宽或者左右边距的命令?

定义一个用于改变线宽或者左右边距的命令?

我正在尝试定义一个多参数命令,它将文本分解为每行只有 34 个字符,或者我想另一种看待它的方式是左边距为 2.7 英寸(比我的默认值多 1 英寸),右边距为 2.4 英寸(比我的默认值多 1.3 英寸)。

本质上我想要的是通过命令每行显示 34 个字符(等宽字体),这可能吗?


这是我目前所拥有的命令,虽然它不起作用,但这是我认为唯一能起作用的命令:

\newcommand{\di}[1]{\setlength{\textwidth}{34em}#1}

这是 MWE

\documentclass[12pt]{letter}
\usepackage{fontspec}
\setmainfont{Courier New}
\setmonofont{Courier New}
\usepackage[width=8.50in, height=11.00in, left=1.70in, right=1.3in, top=0.50in, bottom=1.00in]{geometry}
\newcommand{\di}[1]{\setlength{\textwidth}{34em}#1}   

\begin{document}
Some regular text here...

\di{I want this text to only be 34 characters long}

\end{document}

答案1

changepage包提供了此功能。最简单的方法是使用环境adjustwidth。您必须指定增加边距大小的量,您可以根据文本宽度、默认边距和新窄块的所需文本宽度来计算该量。

一个问题是基于字符定义较窄的文本宽度:正如您在以下示例的测试部分中看到的那样,34 em 实际上比默认文本宽度更宽。34 ex 太窄了。所以在我使用的示例中,\settowidth只输入了 34 个字符。非硬编码解决方案会更好。

第二个问题是大多数打字机字体不允许对齐(见在同一行中同时存在“underfull \hbox”和“overfull \hbox”该怎么办?)。文本块较窄时,许多行会溢出边缘。使用比例字体则不会出现此问题,我在下面其中一张图片中使用了该字体(通过注释掉第二行代码)。

\documentclass[12pt,letterpaper]{article}
\renewcommand*\familydefault{\ttdefault}
\newlength{\Lmargin}
\newlength{\Rmargin}
\newlength{\NarrowBlock}
\newlength{\NarrowMargin}
\setlength{\Lmargin}{1.7in}
\setlength{\Rmargin}{1.3in}
\settowidth{\NarrowBlock}{123456789012345678901234567890123}
\usepackage[left=\Lmargin, right=\Rmargin, top=0.5in, bottom=1in]{geometry}
\setlength{\NarrowMargin}{\textwidth}
\addtolength{\NarrowMargin}{-\NarrowBlock}
\addtolength{\NarrowMargin}{-0.5\NarrowMargin}

\newlength{\Test}
\usepackage{lipsum}
\usepackage[strict]{changepage}

\begin{document}

\section{Lengths}

Textwidth: \the\textwidth; Lmargin: \the\Lmargin; Rmargin: \the\Rmargin

NarrowBlock: \the\NarrowBlock; NarrowMargin \the\NarrowMargin

Test at 34em \setlength{\Test}{34em} \the\Test;
Test at 34ex \setlength{\Test}{34ex} \the\Test

\section{Trial}

\lipsum[1]

\begin{adjustwidth}{\NarrowMargin}{\NarrowMargin}
1234567890123456789012345678901234

\lipsum[2]
\end{adjustwidth}

\lipsum[3]
\end{document}

rmdefault 默认

(仅供参考 - 我使用了 LaTeX 默认字体命令,因此可以在任何引擎上进行测试。)

相关内容