将 \parskip 重置为 0pt “似乎”被 \par 忽略

将 \parskip 重置为 0pt “似乎”被 \par 忽略

我重新审视了旧代码,并以我认为更优雅的方式重写了一些东西,但我得到了意想不到的结果。

我有以下代码,无论我如何设置值,它似乎都能完全按照我的意愿运行\parskip

\documentclass{article}
\usepackage[margin=0.5in]{geometry}

\makeatletter

\newcommand\ae@tpd{}

\newcommand\savetopreviousdepth{%%
  \par\xdef\ae@tpd{\the\prevdepth}}

\newcommand\restoretopreviousdepth{%%
  \par\prevdepth\ae@tpd
  \ifdim\parskip=0pt
  \else
    \vskip -\parskip
  \fi}

\makeatother

%\setlength\parskip{2ex}

\begin{document}

Horum omnium fortissimi sunt Belgae, propterea quod a cultu atque
humanitate provinciae longissime absunt, minimeque ad eos mercatores saepe
commeant atque ea quae ad effeminandos animos pertinent important,
proximique sunt Germanis, qui trans Rhenum incolunt, quibuscum continenter
bellum gerunt. Qua de causa Helvetii quoque reliquos Gallos virtute
praecedunt, quod fere cotidianis proeliis cum Germanis contendunt, cum aut
suis finibus eos prohibent aut ipsi in eorum finibus bellum gerunt.
\begin{minipage}[t]{4.15in}%%'
  Apud Helvetios longe nobilissimus fuit et ditissimus Orgetorix. Is
  M. Messala, [et P.] M. Pisone consulibus regni cupiditate inductus
  coniurationem nobilitatis fecit et civitati persuasit ut de finibus suis cum
  omnibus copiis exirent: perfacile esse, cum virtute omnibus praestarent,
  totius Galliae imperio potiri. Id hoc facilius iis persuasit, quod undique
  loci natura Helvetii continentur:  una ex parte flumine Rheno latissimo atque
  altissimo, qui agrum Helvetium a Germanis dividit; altera ex parte monte Iura
  altissimo, qui est inter Sequanos et Helvetios; tertia lacu Lemanno et flumine
  Rhodano, qui provinciam nostram ab Helvetiis dividit. His rebus fiebat ut et
  minus late vagarentur et minus facile finitimis bellum inferre possent; qua ex
  parte homines bellandi cupidi magno dolore adficiebantur. Pro multitudine
  autem hominum et pro gloria belli atque fortitudinis angustos se fines habere
  arbitrabantur, qui in longitudinem milia passuum 
  \savetopreviousdepth  
\end{minipage}%%'
\restoretopreviousdepth\noindent
His rebus adducti et auctoritate Orgetorigis permoti constituerunt ea
quae ad proficiscendum pertinerent comparare, iumentorum et carrorum quam
maximum numerum coemere, sementes quam maximas facere, ut in itinere copia
frumenti suppeteret, cum proximis civitatibus pacem et amicitiam
confirmare. Ad eas res conficiendas biennium sibi satis esse duxerunt; in
tertium annum profectionem lege confirmant. Ad eas res conficiendas
Orgetorix deligitur. Is sibi legationem ad civitates suscipit. In eo
itinere persuadet Castico, Catamantaloedis filio, Sequano, cuius pater
regnum in Sequanis multos annos obtinuerat et a senatu populi Romani
amicus appellatus erat, ut regnum in civitate sua occuparet, quod pater
ante habuerit; itemque Dumnorigi Haeduo, fratri Diviciaci, qui eo tempore
principatum in civitate obtinebat ac maxime plebi acceptus erat, ut idem
conaretur persuadet eique filiam suam in matrimonium dat. Perfacile factu
esse illis probat conata perficere, propterea quod ipse suae civitatis
imperium obtenturus esset: non esse dubium quin totius Galliae plurimum
Helvetii possent; se suis copiis suoque exercitu illis regna conciliaturum
confirmat. 

Hac oratione adducti inter se fidem et ius iurandum dant et
regno occupato per tres potentissimos ac firmissimos populos totius
Galliae sese potiri posse sperant.

\end{document}

但我认为我可以想出一个更优雅的解决方案,通过重写\restoretopreviousdepth

\newcommand\restoretopreviousdepth{%%
  \bgroup
    \parskip0pt 
    \par\prevdepth\ae@tpd
  \egroup}

换句话说,不必测试是否对 做了任何特殊处理\parskip,只需在本地更改该值即可。但是,当我将其设置为某个非零值时,这根本没有达到预期的效果。在最终产品中,行间距似乎在 的末尾和以下材料之间\parskip插入了 的空间,这完全不是我想要的。2exminipage

现在,如果我写一些不太优雅的东西

\newcommand\restoretopreviousdepth{%%
  \bgroup
    \parskip0pt
    Hq
    \par\noindent 
    Hq
    \par\prevdepth\ae@tpd
  \egroup}

\par似乎在做正确的事情除了当后面跟着 时\prevdepth

有人能解释一下这里发生了什么吗?

答案1

\parskip在的设置

\newcommand\restoretopreviousdepth{%%
  \bgroup
    \parskip0pt 
    \par\prevdepth\ae@tpd
  \egroup}

什么也不做\parskip执行任何操作,就像 TeX 那样树叶垂直模式开始一个新段落,并且(如果发生的话)发生在之后,\egroup因此将使用前一个值。

相关内容