summaryrefslogtreecommitdiff
path: root/2023
diff options
context:
space:
mode:
Diffstat (limited to '2023')
-rw-r--r--2023/02/02/二零二三年二月二日/index.html4
-rw-r--r--2023/03/01/气胸/index.html32
-rw-r--r--2023/03/01/纯牛奶可以加点啥/index.html15
-rw-r--r--2023/03/05/奥司他韦/index.html31
-rw-r--r--2023/03/13/替米沙坦/index.html35
-rw-r--r--2023/03/14/呋塞米/index.html24
-rw-r--r--2023/03/14/螺内酯片/index.html35
-rw-r--r--2023/04/22/二零二三年四月二十二日/index.html20
-rw-r--r--2023/04/25/二零二三年四月二十五日/index.html16
-rw-r--r--2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html12
-rw-r--r--2023/05/01/Rust-虚表布局规则介绍/index.html21
-rw-r--r--2023/05/02/Rust-Partial-语义/index.html11
-rw-r--r--2023/05/03/Rust-NewType-模式/index.html11
-rw-r--r--2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html5
-rw-r--r--2023/06/17/发热及超高热危象/index.html122
-rw-r--r--2023/06/22/灯笼草/index.html49
-rw-r--r--2023/06/28/caml-release-runtime-system导致的死锁问题/index.html10
-rw-r--r--2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html3
-rw-r--r--2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html21
-rw-r--r--2023/08/15/poll-error-attribute-in-OCaml/index.html1
-rw-r--r--2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html1
-rw-r--r--2023/08/27/二零二三年八月二十七日/index.html6
-rw-r--r--2023/09/13/二零二三年九月十三日/index.html3
-rw-r--r--2023/09/28/A-Brief-History-of-Just-In-Time/index.html10
-rw-r--r--2023/10/05/v8中的Number-toString/index.html11
-rw-r--r--2023/10/12/血常规化验结果阅读指南/index.html43
-rw-r--r--2023/10/13/肝功能检查化验单/index.html23
-rw-r--r--2023/10/21/OCaml-Core-Int-pow-的实现/index.html17
-rw-r--r--2023/10/22/冬季咳嗽辨别指南/index.html33
-rw-r--r--2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html5
-rw-r--r--2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html4
-rw-r--r--2023/10/25/肺炎支原体注意事项/index.html36
-rw-r--r--2023/11/16/Fever-of-Unknown-Origin/index.html11
-rw-r--r--2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html3
34 files changed, 421 insertions, 263 deletions
diff --git a/2023/02/02/二零二三年二月二日/index.html b/2023/02/02/二零二三年二月二日/index.html
index 1bc5edc8..956f891b 100644
--- a/2023/02/02/二零二三年二月二日/index.html
+++ b/2023/02/02/二零二三年二月二日/index.html
@@ -184,7 +184,9 @@
</div>
</div>
<div class="post-content">
- <p>我不知道这些黑乎乎的东西从哪来的,它们填满了这黄铜色的硬币每一处,像机油,像泥泞,它们随着这五角钱硬币一起从我手上换走了一袋糖果,那是一个蓬头垢面,满身泥灰的小孩,他起身看着这个给他糖果的叔叔,我蹲下看着我拥有糖果的童年。<br>​<br>​这事很恐怖,意味着我在这个地方又多了一丝牵挂,多了一个不离开的理由。</p>
+ <p>我不知道这些黑乎乎的东西从哪来的,它们填满了这黄铜色的硬币每一处,像机油,像泥泞,它们随着这五角钱硬币一起从我手上换走了一袋糖果,那是一个蓬头垢面,满身泥灰的小孩,他起身看着这个给他糖果的叔叔,我蹲下看着我拥有糖果的童年。<br>
+​<br>
+​这事很恐怖,意味着我在这个地方又多了一丝牵挂,多了一个不离开的理由。</p>
</div>
diff --git a/2023/03/01/气胸/index.html b/2023/03/01/气胸/index.html
index d2cc10de..80229510 100644
--- a/2023/03/01/气胸/index.html
+++ b/2023/03/01/气胸/index.html
@@ -200,10 +200,15 @@
<li>呼吸困难,就像有人捂住你的口鼻,有点窒息的感觉。</li>
</ol>
<p>通俗来讲造成这种感觉的原因是肺泡破裂,肺漏气了。然后气体在胸腔里聚集就压缩了肺。</p>
-<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E6%B0%94%E8%83%B8/%E6%B0%94%E8%83%B82.jpeg" alt="气胸2.jpeg"><br>图中是一位右侧气胸患者(图中右面)的电脑断层扫描影像。在胸腔的边缘有着引流管,而图中黑色一片就是邻近于肺膜间(黑)和肋骨(白)的内腔。心脏则在图中央。医学专科胸腔医学、胸腔外科学症状胸痛、呼吸困难、疲劳常见始发于突发性肇因未知、创伤风险因子慢性阻塞性肺病(COPD)、结核病、抽烟诊断方法胸部X光、超声波、电脑断层扫描相似疾病或共病肺部大疱、血胸预防禁烟或戒烟治疗保守治疗、空针穿刺、胸管置放、肋膜黏连术盛行率约每10万人中20例外伤性气胸。</p>
-<h2 id="临床表现"><a href="#临床表现" class="headerlink" title="临床表现"></a>临床表现</h2><p>在医学上的临床表现中,气胸具有如下症状:<br>患者常有持重物、屏气、剧烈运动等诱发因素,但也有在睡眠中发生气胸者,病人突感一侧胸痛、气急、憋气,可有咳嗽、但痰少,小量闭合性气胸先有气急,但数小时后逐渐平稳,X线也不一定能显示肺压缩。若积气量较大者或者原来已有广泛肺部疾患,病人常不能平卧。如果侧卧,则被迫使气胸患侧在上,以减轻气急。病人呼吸困难程度与积气量的多寡以及原来肺内病变范围有关。当有胸膜粘连和肺功能减损时,即使小量局限性气胸也可能明显胸痛和气急。</p>
-<h2 id="初步诊断方式"><a href="#初步诊断方式" class="headerlink" title="初步诊断方式"></a>初步诊断方式</h2><p>突发一侧胸痛,伴有呼吸困难并有气胸体征,即可作出初步诊断。X线显示气胸征是确诊依据。在无条件或病情危重不允许作X线检查时,可在患侧胸腔积气体征最明确处试穿,抽气测压,若为正压且抽出气体,说明有气胸存在,即应抽出气体以缓解症状,并观察抽气后胸腔内压力的变化以判断气胸类型。在原有严重哮喘或肺气肿基础上并发气胸时,气急、胸闷等症状有时不易觉察,要与原先症状仔细比较。 </p>
-<h2 id="类似病症需要区别开来"><a href="#类似病症需要区别开来" class="headerlink" title="类似病症需要区别开来"></a>类似病症需要区别开来</h2><ol>
+<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E6%B0%94%E8%83%B8/%E6%B0%94%E8%83%B82.jpeg" alt="气胸2.jpeg"><br>
+图中是一位右侧气胸患者(图中右面)的电脑断层扫描影像。在胸腔的边缘有着引流管,而图中黑色一片就是邻近于肺膜间(黑)和肋骨(白)的内腔。心脏则在图中央。医学专科胸腔医学、胸腔外科学症状胸痛、呼吸困难、疲劳常见始发于突发性肇因未知、创伤风险因子慢性阻塞性肺病(COPD)、结核病、抽烟诊断方法胸部X光、超声波、电脑断层扫描相似疾病或共病肺部大疱、血胸预防禁烟或戒烟治疗保守治疗、空针穿刺、胸管置放、肋膜黏连术盛行率约每10万人中20例外伤性气胸。</p>
+<h2 id="临床表现"><a class="header-anchor" href="#临床表现">¶</a>临床表现</h2>
+<p>在医学上的临床表现中,气胸具有如下症状:<br>
+患者常有持重物、屏气、剧烈运动等诱发因素,但也有在睡眠中发生气胸者,病人突感一侧胸痛、气急、憋气,可有咳嗽、但痰少,小量闭合性气胸先有气急,但数小时后逐渐平稳,X线也不一定能显示肺压缩。若积气量较大者或者原来已有广泛肺部疾患,病人常不能平卧。如果侧卧,则被迫使气胸患侧在上,以减轻气急。病人呼吸困难程度与积气量的多寡以及原来肺内病变范围有关。当有胸膜粘连和肺功能减损时,即使小量局限性气胸也可能明显胸痛和气急。</p>
+<h2 id="初步诊断方式"><a class="header-anchor" href="#初步诊断方式">¶</a>初步诊断方式</h2>
+<p>突发一侧胸痛,伴有呼吸困难并有气胸体征,即可作出初步诊断。X线显示气胸征是确诊依据。在无条件或病情危重不允许作X线检查时,可在患侧胸腔积气体征最明确处试穿,抽气测压,若为正压且抽出气体,说明有气胸存在,即应抽出气体以缓解症状,并观察抽气后胸腔内压力的变化以判断气胸类型。在原有严重哮喘或肺气肿基础上并发气胸时,气急、胸闷等症状有时不易觉察,要与原先症状仔细比较。</p>
+<h2 id="类似病症需要区别开来"><a class="header-anchor" href="#类似病症需要区别开来">¶</a>类似病症需要区别开来</h2>
+<ol>
<li>支气管哮喘和阻塞性肺气肿: 有气急和呼吸困难,体征亦与自发性气胸相似,但肺气肿呼吸困难是长期缓慢加重的,支气管哮喘病人有多年哮喘反复发作史。当哮喘和肺气肿病人呼吸困难突然加重且有胸痛,应考虑并发气胸的可能,X线检查可以作出鉴别。</li>
<li>急性心肌梗塞: 病人亦有急起胸痛、胸闷、甚至呼吸困难、休克等临床表现,但常有高血压、动脉粥样硬化、冠心病史。体征、心电图和X线胸透有助于诊断。</li>
<li>肺栓塞: 有胸痛、呼吸困难和紫绀等酷似自发性气胸的临床表现,但病人往往有咯血和低热,并常有下肢或盆腔栓塞性静脉炎、骨折、严重心脏病、心房纤颤等病史,或发生在长期卧床的老年患者。体检和X线检查有助于鉴别。</li>
@@ -220,21 +225,26 @@
</ol>
</blockquote>
<blockquote>
-<p>__先天性肺大疱破裂也可以危及生命__,破裂时会并发自发性气胸,有突然胸痛,呼吸困难。若肺大疱破裂后形成活瓣,吸气时胸腔负压增高,气体进入胸腔,呼气时活瓣关闭,气体不能排出,尤其是咳嗽时,声门关闭气道压力增高,气体进入胸腔,声门开放后,气道压力减低,裂口又闭合,每一次呼吸和咳嗽都使胸腔内气体量增加,就形成张力性气胸。 张力性气胸时患侧肺组织完全萎缩,纵隔被推向健侧,在健侧肺组织亦被压缩的同时心脏大血管移位,大静脉扭曲变形,影响血液回流,造成呼吸循环严重障碍。有可能出现很快的心肺功能衰竭,导致死亡。</p>
+<p><strong>先天性肺大疱破裂也可以危及生命</strong>,破裂时会并发自发性气胸,有突然胸痛,呼吸困难。若肺大疱破裂后形成活瓣,吸气时胸腔负压增高,气体进入胸腔,呼气时活瓣关闭,气体不能排出,尤其是咳嗽时,声门关闭气道压力增高,气体进入胸腔,声门开放后,气道压力减低,裂口又闭合,每一次呼吸和咳嗽都使胸腔内气体量增加,就形成张力性气胸。 张力性气胸时患侧肺组织完全萎缩,纵隔被推向健侧,在健侧肺组织亦被压缩的同时心脏大血管移位,大静脉扭曲变形,影响血液回流,造成呼吸循环严重障碍。有可能出现很快的心肺功能衰竭,导致死亡。</p>
</blockquote>
-<h2 id="急救"><a href="#急救" class="headerlink" title="急救"></a>急救</h2><ol>
-<li><p>胸部损伤: 胸部如果被刺穿,需要立即覆盖伤处,并以凡士林或胶布密封,以免空气继续经伤处流入。无菌的胶布是较理想的选择, 但是所有气密的物质,例如玻璃纸和香烟盒也可以用。密封后,需要开一个小孔(振动筏)来使吸气时排出空气。胸部刺穿的患者需要密切监察,防止引发对生命有危险的张力性气胸。</p>
+<h2 id="急救"><a class="header-anchor" href="#急救">¶</a>急救</h2>
+<ol>
+<li>
+<p>胸部损伤: 胸部如果被刺穿,需要立即覆盖伤处,并以凡士林或胶布密封,以免空气继续经伤处流入。无菌的胶布是较理想的选择, 但是所有气密的物质,例如玻璃纸和香烟盒也可以用。密封后,需要开一个小孔(振动筏)来使吸气时排出空气。胸部刺穿的患者需要密切监察,防止引发对生命有危险的张力性气胸。</p>
</li>
-<li><p>入院前护理: 多数救护员可以进行针刺抽气, 以减低胸部的压力。 如果情况恶化,导管抽气也可能需要,包括有知觉的病人。可能的话,进行额外的治疗和即时送病人到医院治疗。没有经过适当的治疗的话,气胸患者是不能用飞机运送的。</p>
+<li>
+<p>入院前护理: 多数救护员可以进行针刺抽气, 以减低胸部的压力。 如果情况恶化,导管抽气也可能需要,包括有知觉的病人。可能的话,进行额外的治疗和即时送病人到医院治疗。没有经过适当的治疗的话,气胸患者是不能用飞机运送的。</p>
</li>
</ol>
-<h2 id="流行病学"><a href="#流行病学" class="headerlink" title="流行病学"></a>流行病学</h2><p>经年龄调整后的年均发病率﹝AAIR﹞显示,男性患上气胸的机会较女性高出三至六倍。菲什曼在研究中提出以每十万人年计算,男女患上原发性气胸的AAIR分别为7.4和1.2。身高比平均值较高的人,他们患上气胸的AAIR也相对增加 - 至少为76英寸(1.93米)高的人,每十万人年约有200个案例。瘦削的身材也似乎增加了患上原发性气胸的风险。</p>
+<h2 id="流行病学"><a class="header-anchor" href="#流行病学">¶</a>流行病学</h2>
+<p>经年龄调整后的年均发病率﹝AAIR﹞显示,男性患上气胸的机会较女性高出三至六倍。菲什曼在研究中提出以每十万人年计算,男女患上原发性气胸的AAIR分别为7.4和1.2。身高比平均值较高的人,他们患上气胸的AAIR也相对增加 - 至少为76英寸(1.93米)高的人,每十万人年约有200个案例。瘦削的身材也似乎增加了患上原发性气胸的风险。</p>
<p>此外,男性和女性烟民患上原发性气胸,相对于同性别的非吸烟者患上的机会高出约22倍和9倍。而个人吸烟的程度越凶,风险会有“大于线性”的效果:比方说每天吸食10支香烟的人,会比非吸烟者高出20倍患上气胸的机会;每天消耗20支香烟的,则会高出约100倍。</p>
<p>在继发自发性气胸的病例当中,男性和女性的AAIR大概为6.3和2.0,而复发的风险则取决于患者本身有否任何潜在的肺病及其严重性。一旦发生了第二次气胸,病人之后再复发的机会极高。目前来说没有周详的研究调查儿童的发病率,但估计是每年约十万份之5至10。</p>
<p>除外张力性气胸以外,因为气胸而死亡的案例是非常罕见的。据英国统计数字显示,每年每一百万人当中会有1.26位男性和0.62位女性会因为气胸死亡,其中中老年和继发性气胸的患者会有较高的死亡风险。</p>
-<h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul>
+<h2 id="引用"><a class="header-anchor" href="#引用">¶</a>引用</h2>
+<ul>
<li><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/140951268">https://zhuanlan.zhihu.com/p/140951268</a></li>
-<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E6%B0%94%E8%83%B8">https://www.yixue.com/%E6%B0%94%E8%83%B8</a></li>
+<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E6%B0%94%E8%83%B8">https://www.yixue.com/气胸</a></li>
<li><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/84718122">https://zhuanlan.zhihu.com/p/84718122</a></li>
</ul>
diff --git a/2023/03/01/纯牛奶可以加点啥/index.html b/2023/03/01/纯牛奶可以加点啥/index.html
index 7fa7be99..41c716e2 100644
--- a/2023/03/01/纯牛奶可以加点啥/index.html
+++ b/2023/03/01/纯牛奶可以加点啥/index.html
@@ -192,15 +192,20 @@
</div>
</div>
<div class="post-content">
- <h2 id="糖"><a href="#糖" class="headerlink" title="糖"></a>糖</h2><p>纯牛奶加糖可以增加碳水化合物所供给的能量,建议加蔗糖,因为蔗糖在进入消化道被消化液分解后,会变成葡萄糖而被人体吸收,一般是每100毫升牛奶加5-8克糖,即5%-8%的比例。</p>
+ <h2 id="糖"><a class="header-anchor" href="#糖">¶</a>糖</h2>
+<p>纯牛奶加糖可以增加碳水化合物所供给的能量,建议加蔗糖,因为蔗糖在进入消化道被消化液分解后,会变成葡萄糖而被人体吸收,一般是每100毫升牛奶加5-8克糖,即5%-8%的比例。</p>
<p>牛奶中的蛋白质80%为酪蛋白,当牛奶的酸碱度在4.6以下时,大量的酪蛋白会发生凝集、沉淀,难以消化吸收,严重者还可能导致消化不良或腹泻。所以牛奶中不宜添加果汁等酸性饮料。</p>
-<p>需要注意的是:牛奶中含有的赖氨酸在加热条件下能与果糖反应,生成有毒的果糖基赖氨酸,有害于人体,<strong>鲜牛奶在煮沸时不要加糖。</strong><br>此外,红糖里的酸性物质会把牛奶凝结成块,不好吃也不利于吸收。</p>
-<h2 id="蜂蜜"><a href="#蜂蜜" class="headerlink" title="蜂蜜"></a>蜂蜜</h2><p>纯牛奶和纯蜂蜜是一个非常好的搭配,牛奶和蜂蜜之间不存在任何成分反应。蜂蜜中含有丰富的葡萄糖和果糖,属于单糖,可以直接被人体吸收,不会给肠胃造成负担,纯牛奶含有丰富的蛋白质和钙,营养成分丰富,所以纯牛奶加蜂蜜,可以更全面地补充营养。</p>
-<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><ol>
+<p>需要注意的是:牛奶中含有的赖氨酸在加热条件下能与果糖反应,生成有毒的果糖基赖氨酸,有害于人体,<strong>鲜牛奶在煮沸时不要加糖。</strong><br>
+此外,红糖里的酸性物质会把牛奶凝结成块,不好吃也不利于吸收。</p>
+<h2 id="蜂蜜"><a class="header-anchor" href="#蜂蜜">¶</a>蜂蜜</h2>
+<p>纯牛奶和纯蜂蜜是一个非常好的搭配,牛奶和蜂蜜之间不存在任何成分反应。蜂蜜中含有丰富的葡萄糖和果糖,属于单糖,可以直接被人体吸收,不会给肠胃造成负担,纯牛奶含有丰富的蛋白质和钙,营养成分丰富,所以纯牛奶加蜂蜜,可以更全面地补充营养。</p>
+<h2 id="其他"><a class="header-anchor" href="#其他">¶</a>其他</h2>
+<ol>
<li>对于巧克力:牛奶含有丰富的蛋白质和钙,而巧克力含有草酸,两者同食会结合成不溶性草酸钙,极大影响钙的吸收,甚至会出现头发干枯、腹泻、生长缓慢等现象。</li>
<li>对于药物:由于牛奶容易在药物表面形成一个覆盖膜,使奶中的钙、镁等矿物质与药物发生化学反应,形成非水溶性物质,从而影响药效。</li>
</ol>
-<h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul>
+<h2 id="引用"><a class="header-anchor" href="#引用">¶</a>引用</h2>
+<ul>
<li><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/140951268">https://zhuanlan.zhihu.com/p/140951268</a></li>
<li><a target="_blank" rel="noopener" href="https://www.zhihu.com/question/480023755">https://www.zhihu.com/question/480023755</a></li>
</ul>
diff --git a/2023/03/05/奥司他韦/index.html b/2023/03/05/奥司他韦/index.html
index 3843d017..8ebe47a8 100644
--- a/2023/03/05/奥司他韦/index.html
+++ b/2023/03/05/奥司他韦/index.html
@@ -193,24 +193,33 @@
</div>
<div class="post-content">
<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E5%A5%A5%E5%8F%B8%E4%BB%96%E9%9F%A6.jpg" alt="奥司他韦.jpg"></p>
-<p>目前市场上销售的达菲为罗氏制药独家生产的抗流感药物,其通用名称为磷酸奥司他韦(Oseltamivirphosphate)。奥司他韦(Oseltamivir)于1999年在瑞士上市,2001年10月在我国上市。达菲是一种非常有效的流感治疗用药,并且可以大大减少并发症(主要是气管与支气管炎、肺炎、咽炎等)的发生和抗生素的使用,因而是目前治疗流感的最常用药物之一,也是公认的抗禽流感、甲型H1N1病毒最有效的药物之一。 </p>
-<h2 id="主要原理"><a href="#主要原理" class="headerlink" title="主要原理"></a>主要原理</h2><p>奥司他韦口服后经肝脏和肠道酯酶迅速催化转化为其活性代谢物奥司他韦羧酸,奥司他韦羧酸的构型与神经氨酸的过渡态相似,能够竞争性地与流感病毒神经氨酸酶(NA,neu-raminidase,也有称作神经氨酸苷酶)的活动位点结合,因而是一种强效的高选择性的流感病毒NA抑制剂(NAIs),它主要通过干扰病毒从被感染的宿主细胞中释放,从而减少甲型或乙型流感病毒的传播。 </p>
-<h2 id="特殊人群"><a href="#特殊人群" class="headerlink" title="特殊人群"></a>特殊人群</h2><ol>
-<li><p>对不同程度的肾功能不全患者给予100mg磷酸奥司他韦,每日两次,服用五天,显示活性代谢产物水平与降低肾功能成反比。对肌酐清除率小于30ml&#x2F;min的患者建议做剂量调整。目前没有研究数据指导肾功能衰竭患者的用药(肌酐清除小于10ml&#x2F;nin),所以对该人群用药时要慎重。</p>
+<p>目前市场上销售的达菲为罗氏制药独家生产的抗流感药物,其通用名称为磷酸奥司他韦(Oseltamivirphosphate)。奥司他韦(Oseltamivir)于1999年在瑞士上市,2001年10月在我国上市。达菲是一种非常有效的流感治疗用药,并且可以大大减少并发症(主要是气管与支气管炎、肺炎、咽炎等)的发生和抗生素的使用,因而是目前治疗流感的最常用药物之一,也是公认的抗禽流感、甲型H1N1病毒最有效的药物之一。</p>
+<h2 id="主要原理"><a class="header-anchor" href="#主要原理">¶</a>主要原理</h2>
+<p>奥司他韦口服后经肝脏和肠道酯酶迅速催化转化为其活性代谢物奥司他韦羧酸,奥司他韦羧酸的构型与神经氨酸的过渡态相似,能够竞争性地与流感病毒神经氨酸酶(NA,neu-raminidase,也有称作神经氨酸苷酶)的活动位点结合,因而是一种强效的高选择性的流感病毒NA抑制剂(NAIs),它主要通过干扰病毒从被感染的宿主细胞中释放,从而减少甲型或乙型流感病毒的传播。</p>
+<h2 id="特殊人群"><a class="header-anchor" href="#特殊人群">¶</a>特殊人群</h2>
+<ol>
+<li>
+<p>对不同程度的肾功能不全患者给予100mg磷酸奥司他韦,每日两次,服用五天,显示活性代谢产物水平与降低肾功能成反比。对肌酐清除率小于30ml/min的患者建议做剂量调整。目前没有研究数据指导肾功能衰竭患者的用药(肌酐清除小于10ml/nin),所以对该人群用药时要慎重。</p>
</li>
-<li><p>口服磷酸奥司他韦后。肝功能不全患者并没有象预期那样体内奥司他韦水平增高或其活性代谢产物水平降低。</p>
+<li>
+<p>口服磷酸奥司他韦后。肝功能不全患者并没有象预期那样体内奥司他韦水平增高或其活性代谢产物水平降低。</p>
</li>
-<li><p>给予相同剂量的磷酸奥司他韦,同年轻人相比,老年人(年龄在65—78岁间)的稳态代谢物水平比年轻人高25~35%,而两个人群药物半衰期很相似。考虑到药物暴露量和耐受力,老年人不必调整剂量。</p>
+<li>
+<p>给予相同剂量的磷酸奥司他韦,同年轻人相比,老年人(年龄在65—78岁间)的稳态代谢物水平比年轻人高25~35%,而两个人群药物半衰期很相似。考虑到药物暴露量和耐受力,老年人不必调整剂量。</p>
</li>
-<li><p>对一小组5~18岁儿童给予单剂2mg&#x2F;kg的粉末剂,口服建立药代曲线,数据显示儿童年龄越小,对药物前体和其活性代谢产物的清除越快,人体对每mg&#x2F;kg计量单位的承受越少。比如给予5-8岁儿童2mg&#x2F;kg的剂量,若要达到可比性。即相当于要给予成年人单剂75mg奥司他韦(大约为1mg&#x2F;kg)。年龄相差越小,儿童与成年人对每一单位mg&#x2F;kg剂量的代谢差别越小。比如大于12岁的儿童与成年人在药代动力学方面就已经很相似了。</p>
+<li>
+<p>对一小组5~18岁儿童给予单剂2mg/kg的粉末剂,口服建立药代曲线,数据显示儿童年龄越小,对药物前体和其活性代谢产物的清除越快,人体对每mg/kg计量单位的承受越少。比如给予5-8岁儿童2mg/kg的剂量,若要达到可比性。即相当于要给予成年人单剂75mg奥司他韦(大约为1mg/kg)。年龄相差越小,儿童与成年人对每一单位mg/kg剂量的代谢差别越小。比如大于12岁的儿童与成年人在药代动力学方面就已经很相似了。</p>
</li>
</ol>
-<h2 id="不良反应"><a href="#不良反应" class="headerlink" title="不良反应"></a>不良反应</h2><p>在罗氏提交美国联邦食品和药品管理局的申报材料中指出,奥司他韦(达菲)主要的不良反应显示为消化道的不适,包括恶心、呕吐、腹泻、腹痛等,其次是呼吸系统的不良反应,包括支气管炎、咳嗽等,此外还有中枢神经系统的不良反应,如眩晕、头痛、失眠、疲劳等。</p>
+<h2 id="不良反应"><a class="header-anchor" href="#不良反应">¶</a>不良反应</h2>
+<p>在罗氏提交美国联邦食品和药品管理局的申报材料中指出,奥司他韦(达菲)主要的不良反应显示为消化道的不适,包括恶心、呕吐、腹泻、腹痛等,其次是呼吸系统的不良反应,包括支气管炎、咳嗽等,此外还有中枢神经系统的不良反应,如眩晕、头痛、失眠、疲劳等。</p>
<p>在2004年1月,FDA还发出对于奥司他韦的消费警讯,声称由于1岁以内幼儿血脑屏障发育不完全,奥司他韦应用于幼儿可能造成脑内药物浓度过高,形成潜在的安全问题。</p>
<p>2005年有日本媒体报道日本青少年服用奥斯他韦后自杀并有精神异常反应,此后日本先后报道数十例此类不良反应,此后世界各地媒体纷纷转载报道,引起公众关注。2005年11月FDA就这一反应作出报告,认为没有证据证明奥斯他韦可以导致精神异常,日本的不良反应病例系大众媒体报道后经心理暗示作用引起的群体性臆症。</p>
-<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>需要注意的是,奥司他韦是通过抑制病毒的复制而起到治疗流感作用的,如果人体没有感染病毒,吃了“达菲”也是没有任何作用的。也就是说,“达菲”是在体内存在病毒的前提下起到杀灭病毒的作用,它不可能抵抗病毒侵入人体。</p>
-<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
-<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%e8%be%be%e8%8f%b2">https://www.yixue.com/%e8%be%be%e8%8f%b2</a></li>
+<h2 id="其他"><a class="header-anchor" href="#其他">¶</a>其他</h2>
+<p>需要注意的是,奥司他韦是通过抑制病毒的复制而起到治疗流感作用的,如果人体没有感染病毒,吃了“达菲”也是没有任何作用的。也就是说,“达菲”是在体内存在病毒的前提下起到杀灭病毒的作用,它不可能抵抗病毒侵入人体。</p>
+<h2 id="参考"><a class="header-anchor" href="#参考">¶</a>参考</h2>
+<ul>
+<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%e8%be%be%e8%8f%b2">https://www.yixue.com/达菲</a></li>
</ul>
</div>
diff --git a/2023/03/13/替米沙坦/index.html b/2023/03/13/替米沙坦/index.html
index 83ee8d88..f5898762 100644
--- a/2023/03/13/替米沙坦/index.html
+++ b/2023/03/13/替米沙坦/index.html
@@ -192,13 +192,16 @@
</div>
</div>
<div class="post-content">
- <h2 id="名称"><a href="#名称" class="headerlink" title="名称"></a>名称</h2><p>中文名称: 替米沙坦</p>
+ <h2 id="名称"><a class="header-anchor" href="#名称">¶</a>名称</h2>
+<p>中文名称: 替米沙坦</p>
<p>中文别名: 4-{[2-正丙基-4-甲基-6-(1-甲基苯并咪唑-2-基)苯并咪唑-1-基]甲基}联苯基-2-羧酸</p>
<p>英文名称: Telmisartan</p>
-<p>英文别名: 4’[(1,4’-Dimethyl-2’-propyl[2,6’-bi-1H-benzimidazol]-1’-yl)methyl][1,1’-biphenyl]-2-carboxylic acid </p>
-<h2 id="概要"><a href="#概要" class="headerlink" title="概要"></a>概要</h2><p>替米沙坦是一种新型的降血压药物,是一种特异性血管紧张素Ⅱ受体(ATⅠ型)拮抗剂。替米沙坦替代血管紧张素Ⅱ受体与ATⅠ受体亚型(已知的血管紧张素Ⅱ作用位点)高亲和性结合。替米沙坦在ATⅠ受体位点无任何部位激动剂效应,替米沙坦选择性与ATⅠ受体结合,该结合作用持久。替米沙坦对其他受体(包括AT2和其它特征更少的AT受体)无亲和力。上述其它受体的功能尚未可知,由于替米沙坦导致血管紧张素Ⅱ水平增高,从而可能引起的受体过度刺激效应亦不可知。替米沙坦不抑制人体血浆肾素,亦不阻断离子通道。替米沙坦不抑制血管紧张素转换酶Ⅱ,该酶亦可降解缓激肽作用增强导致的不良反应。在人体给予80mg替米沙坦几乎可完全抑制血管紧张素Ⅱ引起的血压升高。抑制效应持续24小时,在48小时仍可测到。首剂替米沙坦后3小时内降压效应逐渐明显。在治疗开始后4周可获得最大降压效果,并可在长期治疗中维持。替米沙坦治疗如突然中断,数天后血压逐渐恢复到治疗前水平,而不出现反弹性高血压。在直接比较两种高血压药物的临床试验研究中,替米沙坦治疗组的患者干咳发生率显著低于血管紧张素转换酶抑制剂治疗组。 </p>
+<p>英文别名: 4’[(1,4’-Dimethyl-2’-propyl[2,6’-bi-1H-benzimidazol]-1’-yl)methyl][1,1’-biphenyl]-2-carboxylic acid</p>
+<h2 id="概要"><a class="header-anchor" href="#概要">¶</a>概要</h2>
+<p>替米沙坦是一种新型的降血压药物,是一种特异性血管紧张素Ⅱ受体(ATⅠ型)拮抗剂。替米沙坦替代血管紧张素Ⅱ受体与ATⅠ受体亚型(已知的血管紧张素Ⅱ作用位点)高亲和性结合。替米沙坦在ATⅠ受体位点无任何部位激动剂效应,替米沙坦选择性与ATⅠ受体结合,该结合作用持久。替米沙坦对其他受体(包括AT2和其它特征更少的AT受体)无亲和力。上述其它受体的功能尚未可知,由于替米沙坦导致血管紧张素Ⅱ水平增高,从而可能引起的受体过度刺激效应亦不可知。替米沙坦不抑制人体血浆肾素,亦不阻断离子通道。替米沙坦不抑制血管紧张素转换酶Ⅱ,该酶亦可降解缓激肽作用增强导致的不良反应。在人体给予80mg替米沙坦几乎可完全抑制血管紧张素Ⅱ引起的血压升高。抑制效应持续24小时,在48小时仍可测到。首剂替米沙坦后3小时内降压效应逐渐明显。在治疗开始后4周可获得最大降压效果,并可在长期治疗中维持。替米沙坦治疗如突然中断,数天后血压逐渐恢复到治疗前水平,而不出现反弹性高血压。在直接比较两种高血压药物的临床试验研究中,替米沙坦治疗组的患者干咳发生率显著低于血管紧张素转换酶抑制剂治疗组。</p>
<p>替米沙坦降压幅度大,部分患者可能会出现低血压,这个倒是挺尴尬的。</p>
-<h2 id="要点"><a href="#要点" class="headerlink" title="要点"></a>要点</h2><p>1 药代动力学显示:作用迅速(0.3h),持续时间长 (35.4h),降压时对心率的影响小</p>
+<h2 id="要点"><a class="header-anchor" href="#要点">¶</a>要点</h2>
+<p>1 药代动力学显示:作用迅速(0.3h),持续时间长 (35.4h),降压时对心率的影响小</p>
<p>2 同依那普利比较:降压效果优于依那普利,两者同利尿剂合用,效果 仍为替米沙坦好,且咳嗽发生率少</p>
<p>3 同赖诺普利比较:降压(收缩压和舒张压)效果更为明显,咳嗽发生率替米沙坦组(16%)明显低于赖诺普利组(60%)</p>
<p>4 同阿替洛尔比较:降压效果相当,副作用(阳痿和疲劳)发生率低</p>
@@ -207,13 +210,23 @@
<p>具有受体作用的专一性</p>
<p>抗高血压作用显著</p>
<p>具有良好的利尿作用</p>
-<p>能改善心肌狭窄障碍   </p>
-<h2 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h2><p>成人用药:一次mg—80mg,一日一次。服用时间不受饮食影响。 轻或中度肾功能不良的病人,以及老人服用本品不需调整剂量。轻或中度肝功能不全的病人,本品用量不应超过40mg&#x2F;日。对于儿童:本品的安全性及有效性数据尚未建立。 腹泻和血管性水肿。大多为轻微的和暂时的,一般不需停止治疗。其发生与剂量无相关性。</p>
-<p>注意:<br>1.本品使用过量时若发生症状性低血压应进行支持性治疗,本品不能通过血液透析清除。<br>2.本品可能会增加抗高血压药物的降压作用。<br>3.与某些药物合用时应监测血清锂水平。<br>4.轻至中度肾功能损伤患者不需调整本品剂量<br> &gt; 替米沙坦主要通过肝脏代谢,胆汁排泄,胆汁淤积、胆道梗阻或严重肝功能不全患者不应使用替米沙坦,用药期间定期检查肝功能,肾功能不全的患者用药期间要密切监测血钾水平。</p>
-<p>5.孕妇及哺辱期妇女禁用本品。<br>6.儿童患者使用本品的安全性尚未确立,儿童慎用。   </p>
-<p>特别注意的是!<br>1.对患有胆汁梗阻性疾病和严重肝肾功能不全者禁用。<br>2.孕妇及哺辱期妇女禁用。 </p>
-<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
-<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E6%9B%BF%E7%B1%B3%E6%B2%99%E5%9D%A6">https://www.yixue.com/%E6%9B%BF%E7%B1%B3%E6%B2%99%E5%9D%A6</a></li>
+<p>能改善心肌狭窄障碍</p>
+<h2 id="注意"><a class="header-anchor" href="#注意">¶</a>注意</h2>
+<p>成人用药:一次mg—80mg,一日一次。服用时间不受饮食影响。 轻或中度肾功能不良的病人,以及老人服用本品不需调整剂量。轻或中度肝功能不全的病人,本品用量不应超过40mg/日。对于儿童:本品的安全性及有效性数据尚未建立。 腹泻和血管性水肿。大多为轻微的和暂时的,一般不需停止治疗。其发生与剂量无相关性。</p>
+<p>注意:<br>
+1.本品使用过量时若发生症状性低血压应进行支持性治疗,本品不能通过血液透析清除。<br>
+2.本品可能会增加抗高血压药物的降压作用。<br>
+3.与某些药物合用时应监测血清锂水平。<br>
+4.轻至中度肾功能损伤患者不需调整本品剂量<br>
+&gt; 替米沙坦主要通过肝脏代谢,胆汁排泄,胆汁淤积、胆道梗阻或严重肝功能不全患者不应使用替米沙坦,用药期间定期检查肝功能,肾功能不全的患者用药期间要密切监测血钾水平。</p>
+<p>5.孕妇及哺辱期妇女禁用本品。<br>
+6.儿童患者使用本品的安全性尚未确立,儿童慎用。</p>
+<p>特别注意的是!<br>
+1.对患有胆汁梗阻性疾病和严重肝肾功能不全者禁用。<br>
+2.孕妇及哺辱期妇女禁用。</p>
+<h2 id="参考"><a class="header-anchor" href="#参考">¶</a>参考</h2>
+<ul>
+<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E6%9B%BF%E7%B1%B3%E6%B2%99%E5%9D%A6">https://www.yixue.com/替米沙坦</a></li>
</ul>
</div>
diff --git a/2023/03/14/呋塞米/index.html b/2023/03/14/呋塞米/index.html
index 328db297..398da049 100644
--- a/2023/03/14/呋塞米/index.html
+++ b/2023/03/14/呋塞米/index.html
@@ -193,21 +193,25 @@
</div>
<div class="post-content">
<p><strong>孕妇禁用,小儿慎用!!!!</strong></p>
-<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>口服吸收迅速,生物利用度约为60%,约30分钟起效,1~2小时达高峰,持续6~8小时。静脉注射5~10分钟起效,30分钟达高峰,t1/2约1小时,维持4~6小时。血浆蛋白结合率约98%。大部分以原形经近曲小管有机酸分泌系统随尿排出。反复给药不易蓄积。   </p>
+<h2 id="简介"><a class="header-anchor" href="#简介">¶</a>简介</h2>
+<p>口服吸收迅速,生物利用度约为60%,约30分钟起效,1~2小时达高峰,持续6~8小时。静脉注射5~10分钟起效,30分钟达高峰,t1/2约1小时,维持4~6小时。血浆蛋白结合率约98%。大部分以原形经近曲小管有机酸分泌系统随尿排出。反复给药不易蓄积。</p>
<p>主要作用有两个</p>
<ol>
<li>利尿:作用强大、迅速而短暂,但个体差异明显,应注意剂量个体化。而且利尿作用不受酸碱平衡失调及电解质紊乱的影响。需要注意的是,这个药容易引起低血钾、低盐综合征及低氯性碱中毒。低血钾最常见,还促进Ca2+、Mg2+排出,而抑制尿酸排出。</li>
<li>扩张血管:能扩张肾血管,增加肾血流量,改变肾皮质内血流分布,还能扩张小静脉,减少回心血量,减轻心脏负荷,降低左室充盈压,减轻肺水肿。扩血管机制可能与本药促进前列腺素酶合成,抑制其分解有关。</li>
</ol>
-<p>临床上用于治疗心脏性水肿、肾性水肿、肝硬化腹水、机能障碍或血管障碍所引起的周围性水肿,并可促使上部尿道结石的排出。其利尿作用迅速、强大,多用于其它利尿药无效的严重病例。由于水、电解质丢失明显等原因,故不宜常规使用。静脉给药(20~80mg)可治疗肺水肿和脑水肿。药物中毒时可用以加速毒物的排泄。   </p>
-<h2 id="用药"><a href="#用药" class="headerlink" title="用药"></a>用药</h2><p>肌注或静注隔日1次,每次mg,必要时亦可1日~2次。1日量视需要可增至120mg。静注必须缓慢,不宜与其他药物混合注射。儿童用量酌减(2)口服开始时每日~40mg,以后根据需要可增至每日~120mg。当每日剂量超过40mg时,可以每4小时1次分服。儿童口服量开始按1~2mg/kg,再视情况酌增。长期(7~10日)用药后利尿作用消失,故需长期应用者,宜采取间歇疗法:给药1~3日,停药2~4日。   </p>
-<h2 id="不良反应"><a href="#不良反应" class="headerlink" title="不良反应"></a>不良反应</h2><ol>
-<li>水与电解质紊乱,常为过度利尿所引起,表现为低血容量、低血钾、低血钠、低氯性碱血症,长期应用还可引起低血镁。 </li>
+<p>临床上用于治疗心脏性水肿、肾性水肿、肝硬化腹水、机能障碍或血管障碍所引起的周围性水肿,并可促使上部尿道结石的排出。其利尿作用迅速、强大,多用于其它利尿药无效的严重病例。由于水、电解质丢失明显等原因,故不宜常规使用。静脉给药(20~80mg)可治疗肺水肿和脑水肿。药物中毒时可用以加速毒物的排泄。</p>
+<h2 id="用药"><a class="header-anchor" href="#用药">¶</a>用药</h2>
+<p>肌注或静注隔日1次,每次mg,必要时亦可1日~2次。1日量视需要可增至120mg。静注必须缓慢,不宜与其他药物混合注射。儿童用量酌减(2)口服开始时每日~40mg,以后根据需要可增至每日~120mg。当每日剂量超过40mg时,可以每4小时1次分服。儿童口服量开始按1~2mg/kg,再视情况酌增。长期(7~10日)用药后利尿作用消失,故需长期应用者,宜采取间歇疗法:给药1~3日,停药2~4日。</p>
+<h2 id="不良反应"><a class="header-anchor" href="#不良反应">¶</a>不良反应</h2>
+<ol>
+<li>水与电解质紊乱,常为过度利尿所引起,表现为低血容量、低血钾、低血钠、低氯性碱血症,长期应用还可引起低血镁。</li>
<li>耳毒性,表现为耳鸣、听力减退或暂时性耳聋,呈剂量依赖性。耳毒性的发生机制可能与药物引起内耳淋巴液电解质成分改变有关。肾功能不全或同时使用其他耳毒性药物,如并用氨基糖苷类抗生素时较易发生耳毒性。</li>
<li>高尿酸血症,袢利尿药可能造成高尿酸血症,并引发痛风。</li>
<li>其他,可有恶心、呕吐、大剂量时尚可出现胃肠出血。</li>
</ol>
-<h2 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h2><ol>
+<h2 id="注意"><a class="header-anchor" href="#注意">¶</a>注意</h2>
+<ol>
<li>可能出现轻微恶心、腹泻、药疹、瘙痒、视力模糊等副作用,有时可发生起立性眩晕、乏力、疲倦、肌肉痉挛、口渴,少数病例有白细胞减少,个别病例出现血小板减少、多形性红斑、直立性低血压。长期应用可致胃及十二指肠溃疡。</li>
<li>由于能减少尿酸排出,故多次应用后能产生尿酸过多症,个别病人长期应用可产生急性痛风。痛风病患者慎用。</li>
<li>糖尿病患者应用后可使血糖增高;糖尿病患者慎用。尽管其升血糖远较噻嗪类利尿药弱,但与降血糖药合并应用时,仍有使血糖增高的可能。</li>
@@ -220,9 +224,11 @@
<li>因结构上是与氯噻嗪结构相似的磺胺型化合物,能降低动脉对升压胺(如去甲肾上腺素)的反应,并能增加筒箭毒硷的肌松弛及麻痹作用,故手术前一周应停用。(11)低钾血症、超量服用洋地黄、肝昏迷患者禁用。晚期肝硬化患者慎用。</li>
<li>大剂量静注过快时,可出现听力减退或暂时性耳聋。不宜与氨基糖昔类抗生素配伍应用,因更易引起听力减退。</li>
</ol>
-<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>螺内酯为《2018版中国国家基本药物目录》在列药物,“基本药物”指的是能够满足基本医疗卫生需求,剂型适宜、保证供应、基层能够配备、国民能够公平获得的药品。</p>
-<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
-<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E5%91%8B%E5%A1%9E%E7%B1%B3">https://www.yixue.com/%E5%91%8B%E5%A1%9E%E7%B1%B3</a></li>
+<h2 id="其他"><a class="header-anchor" href="#其他">¶</a>其他</h2>
+<p>螺内酯为《2018版中国国家基本药物目录》在列药物,“基本药物”指的是能够满足基本医疗卫生需求,剂型适宜、保证供应、基层能够配备、国民能够公平获得的药品。</p>
+<h2 id="参考"><a class="header-anchor" href="#参考">¶</a>参考</h2>
+<ul>
+<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E5%91%8B%E5%A1%9E%E7%B1%B3">https://www.yixue.com/呋塞米</a></li>
</ul>
</div>
diff --git a/2023/03/14/螺内酯片/index.html b/2023/03/14/螺内酯片/index.html
index 4a52f525..9fef82da 100644
--- a/2023/03/14/螺内酯片/index.html
+++ b/2023/03/14/螺内酯片/index.html
@@ -192,19 +192,21 @@
</div>
</div>
<div class="post-content">
- <h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>螺内酯是保钾利尿药,用于治疗心衰、低钾血症和高血压等。但是,它也会阻断雄激素受体,从而具有抗雄激素特性(我想你应该联想到了什么);不过其效力较弱,需服用较大剂量方可充分起效(尿频等副作用也更明显)。</p>
+ <h2 id="简介"><a class="header-anchor" href="#简介">¶</a>简介</h2>
+<p>螺内酯是保钾利尿药,用于治疗心衰、低钾血症和高血压等。但是,它也会阻断雄激素受体,从而具有抗雄激素特性(我想你应该联想到了什么);不过其效力较弱,需服用较大剂量方可充分起效(尿频等副作用也更明显)。</p>
<p>英文名称:Spironolactone Tablets.</p>
<p>需要注意的是,开始服用螺内酯前:</p>
<ol>
-<li>血清钾应小于 5.0mmol&#x2F;L</li>
+<li>血清钾应小于 5.0mmol/L</li>
<li>肾功能应正常,服用螺内酯后定期监测血钾和肌酐</li>
<li>避免过多食用富钾食品,如香蕉、海带、含钾代用盐等</li>
<li>不得同时服用其它利钾药物; 多喝水。</li>
</ol>
-<p>对于利尿方面,螺内酯的利尿作用不强,起效慢而维时久,其利尿作用与体内醛固酮的浓度有关。仅当体内有醛固酮存在时,它才发挥作用。对切除肾上腺的动物则无利尿作用。由于其利尿作用较弱,抑制Na+再吸收量还不到3%,因此较少单用。常与噻嗪类利尿药或高效利尿药合用以增强利尿效果并减少K+的丧失。 </p>
+<p>对于利尿方面,螺内酯的利尿作用不强,起效慢而维时久,其利尿作用与体内醛固酮的浓度有关。仅当体内有醛固酮存在时,它才发挥作用。对切除肾上腺的动物则无利尿作用。由于其利尿作用较弱,抑制Na+再吸收量还不到3%,因此较少单用。常与噻嗪类利尿药或高效利尿药合用以增强利尿效果并减少K+的丧失。</p>
<p>如果病人出现了高钾血症,那应该立即停药。另外如果在进食的时候或者餐后用药,可以减少胃肠道反应(提高生物利用度)。</p>
<p><strong>本药起作用较慢,而维持时间较长,故首日剂量可增加至常规剂量的2-3倍,以后酌情调整剂量。与其他利尿药合用时,可先于其他利尿药2-3日服用。在已应用其他利尿药再加用本药时,其他利尿药剂量在最初2-3日可减量50%,以后酌情调整剂量。在停药时,本药应先于其他利尿药2-3日停药。</strong></p>
-<h2 id="副作用"><a href="#副作用" class="headerlink" title="副作用:"></a>副作用:</h2><ol>
+<h2 id="副作用"><a class="header-anchor" href="#副作用">¶</a>副作用:</h2>
+<ol>
<li>高钾血症:螺内酯最严重的副作用,可导致住院甚至死亡。(高年龄(超 45 岁)、肾功能不全、与其它利钾药物合用、钾补剂的服用等)</li>
<li>尿频</li>
<li>血压过低</li>
@@ -216,34 +218,39 @@
<li>皮质醇水平升高</li>
<li>胃肠道反应,包括恶心、呕吐、腹泻、胃痉挛、胃炎等</li>
</ol>
-<h2 id="药理"><a href="#药理" class="headerlink" title="药理"></a>药理</h2><p>本药结构与醛固酮相似,为醛固酮的竞争性抑制剂。作用于远曲小管和集合管,阻断Na+-K+和Na+-H+交换,结果Na+、C1-和水排泄增多,K+、Mg2+和H+排泄减少,对Ca2+和P3-的作用不定。由于本药仅作用于远曲小管和集合管,对肾小管其他各段无作用,故利尿作用较弱。另外,本药对肾小管以外的醛固酮靶器官也有作用。</p>
-<h2 id="代谢"><a href="#代谢" class="headerlink" title="代谢"></a>代谢</h2><p>这个药口服吸收较好,生物利用度大于90%,血浆蛋白结合率在90%以上,进入体内后80%由肝脏迅速代谢为有活性的坎利酮(canrenone),口服1日左右起效,2-3日达高峰,停药后作用仍可维持2-3日。依服药方式不同T1/2有所差异,每日服药1~2次时平均19小时(13-24小时),每日服药4次时缩短为12.5小时(9-16小时)。无活性代谢产物从肾脏和胆道排泄,约有10%以原形从肾脏排泄。   </p>
-<h2 id="适应症"><a href="#适应症" class="headerlink" title="适应症"></a>适应症</h2><ol>
+<h2 id="药理"><a class="header-anchor" href="#药理">¶</a>药理</h2>
+<p>本药结构与醛固酮相似,为醛固酮的竞争性抑制剂。作用于远曲小管和集合管,阻断Na+-K+和Na+-H+交换,结果Na+、C1-和水排泄增多,K+、Mg2+和H+排泄减少,对Ca2+和P3-的作用不定。由于本药仅作用于远曲小管和集合管,对肾小管其他各段无作用,故利尿作用较弱。另外,本药对肾小管以外的醛固酮靶器官也有作用。</p>
+<h2 id="代谢"><a class="header-anchor" href="#代谢">¶</a>代谢</h2>
+<p>这个药口服吸收较好,生物利用度大于90%,血浆蛋白结合率在90%以上,进入体内后80%由肝脏迅速代谢为有活性的坎利酮(canrenone),口服1日左右起效,2-3日达高峰,停药后作用仍可维持2-3日。依服药方式不同T1/2有所差异,每日服药1~2次时平均19小时(13-24小时),每日服药4次时缩短为12.5小时(9-16小时)。无活性代谢产物从肾脏和胆道排泄,约有10%以原形从肾脏排泄。</p>
+<h2 id="适应症"><a class="header-anchor" href="#适应症">¶</a>适应症</h2>
+<ol>
<li>水肿性疾病 与其他利尿药合用,治疗充血性水肿、肝硬化腹水、肾性水肿等水肿性疾病,其目的在于纠正上述疾病时伴发的继发性醛固酮分泌增多,并对抗其他利尿药的排钾作用。也用于特发性水肿的治疗。</li>
<li>高血压 作为治疗高血压的辅助药物。</li>
<li>原发性醛固酮增多症 螺内酯可用于此病的诊断和治疗。</li>
<li>低钾血症的预防 与噻嗪类利尿药合用,增强利尿效应和预防低钾血症。</li>
</ol>
-<p>   </p>
-<h2 id="药物相互作用"><a href="#药物相互作用" class="headerlink" title="药物相互作用"></a>药物相互作用</h2><ol>
+<h2 id="药物相互作用"><a class="header-anchor" href="#药物相互作用">¶</a>药物相互作用</h2>
+<ol>
<li>肾上腺皮质激素尤其是具有较强盐皮质激素作用者,促肾上腺皮质激素能减弱本药的利尿作用,而拮抗本药的潴钾作用。</li>
<li>雌激素能引起水钠潴留,从而减弱本药的利尿作用。</li>
<li>非甾体类消炎镇痛药,尤其是吲哚美辛,能降低本药的利尿作用,且合用时肾毒性增加。</li>
<li>拟交感神经药物降低本药的降压作用。</li>
<li>多巴胺加强本药的利尿作用。</li>
<li>与引起血压下降的药物合用,利尿和降压效果均加强。</li>
-<li>与下列药物合用时,发生高钾血症的机会增加,如含钾药物、库存血(含钾30mmol&#x2F;L,如库存10日以上含钾高达65mmol&#x2F;L)、血管紧张素转换酶抑制剂、血管紧张素Ⅱ受体拮抗剂和环孢素A等。</li>
+<li>与下列药物合用时,发生高钾血症的机会增加,如含钾药物、库存血(含钾30mmol/L,如库存10日以上含钾高达65mmol/L)、血管紧张素转换酶抑制剂、血管紧张素Ⅱ受体拮抗剂和环孢素A等。</li>
<li>与葡萄糖胰岛素液、碱剂、钠型降钾交换树脂合用,发生高钾血症的机会减少。</li>
<li>本药使地高辛半衰期延长。</li>
<li>与氯化铵合用易发生代谢性酸中毒。</li>
<li>与肾毒性药物合用,肾毒性增加。</li>
<li>甘珀酸钠、甘草类制剂具有醛固酮样作用,可降低本药的利尿作用。</li>
</ol>
-<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>螺内酯为《2018版中国国家基本药物目录》在列药物,“基本药物”指的是能够满足基本医疗卫生需求,剂型适宜、保证供应、基层能够配备、国民能够公平获得的药品。</p>
-<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
+<h2 id="其他"><a class="header-anchor" href="#其他">¶</a>其他</h2>
+<p>螺内酯为《2018版中国国家基本药物目录》在列药物,“基本药物”指的是能够满足基本医疗卫生需求,剂型适宜、保证供应、基层能够配备、国民能够公平获得的药品。</p>
+<h2 id="参考"><a class="header-anchor" href="#参考">¶</a>参考</h2>
+<ul>
<li><a target="_blank" rel="noopener" href="https://mtf.wiki/zh-cn/docs/medicine/antiandrogen/spironolactone/">https://mtf.wiki/zh-cn/docs/medicine/antiandrogen/spironolactone/</a></li>
-<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E8%9E%BA%E5%86%85%E9%85%AF">https://www.yixue.com/%E8%9E%BA%E5%86%85%E9%85%AF</a></li>
-<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E8%8D%AF%E7%90%86%E5%AD%A6/%E8%9E%BA%E5%86%85%E9%85%AF">https://www.yixue.com/%E8%8D%AF%E7%90%86%E5%AD%A6/%E8%9E%BA%E5%86%85%E9%85%AF</a></li>
+<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E8%9E%BA%E5%86%85%E9%85%AF">https://www.yixue.com/螺内酯</a></li>
+<li><a target="_blank" rel="noopener" href="https://www.yixue.com/%E8%8D%AF%E7%90%86%E5%AD%A6/%E8%9E%BA%E5%86%85%E9%85%AF">https://www.yixue.com/药理学/螺内酯</a></li>
</ul>
</div>
diff --git a/2023/04/22/二零二三年四月二十二日/index.html b/2023/04/22/二零二三年四月二十二日/index.html
index a4b325b5..26106e93 100644
--- a/2023/04/22/二零二三年四月二十二日/index.html
+++ b/2023/04/22/二零二三年四月二十二日/index.html
@@ -184,16 +184,16 @@
</div>
</div>
<div class="post-content">
- <p> 二零二三年四月二十二日, 风沙把阳光的气息卷入帐篷, 现在是凌晨四点二十七,快天亮了, 仍有些微凉, 我即将踏入看不到边的大漠。</p>
-<p> 我的心思很简单, 忘了些什么, 记起来些什么, 痛苦的根源在哪里, </p>
-<p> 从这渲扰的世界沉静下来,好让我这满是凡尘虚伪的灵魂有一丝陈酿,还有世界的上方流泪的天空,和被二氧化碳覆盖的皮囊,该怎么回到最初的样子。</p>
-<p> 我也曾独自冒着冷风,去薄霜铺地的林子里,为听鸟语,为盼朝阳,为寻泥土里渐次苏醒的花草,但春信不至。我是如此单独而完整,在无数个夜晚,独自顶着冷风 伫立在老橘树下的桥头,只为听一曲夜莺的哀歌,倚暖了石栏上的青苔,青苔凉透了我的心坎,但夜莺不来,夜莺不来啊。</p>
-<p> 不多矫情, 秋风骀荡兮,我心向伊,漫漫黄沙兮,修我足迹!</p>
-<p> 不知道这漫无边际的黄沙下面埋葬了多少文明, 只觉神秘, 但未曾有过恐惧, 我敬畏着这个世界。</p>
-<p> 给岁月以文明,进入大漠只有往前,没有后路。</p>
-<p> 岁月中的某个文明中的某个人,曾经也骑着骆驼向远方,又是哪个人,吟着佛门心语站在我身旁,我听见大漠的念经声。</p>
-<p> 我不是个有耐心的人, 抄经书对我来说是种折磨, 我只能选择把经文抄在大地上, 黄沙上, 用自己的双腿一点点写, 用耳去倾听狂风卷积的声音。</p>
-<p> 我生来就是为了把这个世界的消息和秘密带到下一个世界去。</p>
+ <p>二零二三年四月二十二日, 风沙把阳光的气息卷入帐篷, 现在是凌晨四点二十七,快天亮了, 仍有些微凉, 我即将踏入看不到边的大漠。</p>
+<p>我的心思很简单, 忘了些什么, 记起来些什么, 痛苦的根源在哪里,</p>
+<p>从这渲扰的世界沉静下来,好让我这满是凡尘虚伪的灵魂有一丝陈酿,还有世界的上方流泪的天空,和被二氧化碳覆盖的皮囊,该怎么回到最初的样子。</p>
+<p>我也曾独自冒着冷风,去薄霜铺地的林子里,为听鸟语,为盼朝阳,为寻泥土里渐次苏醒的花草,但春信不至。我是如此单独而完整,在无数个夜晚,独自顶着冷风 伫立在老橘树下的桥头,只为听一曲夜莺的哀歌,倚暖了石栏上的青苔,青苔凉透了我的心坎,但夜莺不来,夜莺不来啊。</p>
+<p>不多矫情, 秋风骀荡兮,我心向伊,漫漫黄沙兮,修我足迹!</p>
+<p>不知道这漫无边际的黄沙下面埋葬了多少文明, 只觉神秘, 但未曾有过恐惧, 我敬畏着这个世界。</p>
+<p>给岁月以文明,进入大漠只有往前,没有后路。</p>
+<p>岁月中的某个文明中的某个人,曾经也骑着骆驼向远方,又是哪个人,吟着佛门心语站在我身旁,我听见大漠的念经声。</p>
+<p>我不是个有耐心的人, 抄经书对我来说是种折磨, 我只能选择把经文抄在大地上, 黄沙上, 用自己的双腿一点点写, 用耳去倾听狂风卷积的声音。</p>
+<p>我生来就是为了把这个世界的消息和秘密带到下一个世界去。</p>
</div>
diff --git a/2023/04/25/二零二三年四月二十五日/index.html b/2023/04/25/二零二三年四月二十五日/index.html
index 1ad49fd5..74820a9e 100644
--- a/2023/04/25/二零二三年四月二十五日/index.html
+++ b/2023/04/25/二零二三年四月二十五日/index.html
@@ -185,14 +185,14 @@
</div>
<div class="post-content">
<p>一位真正的作家永远只为自己的内心写作,只有内心才会真实的告诉他,他的自私,他的高尚是多么的突出。内心让他真实地了解自己,一旦了解了自己也就了解了世界。</p>
-<p> 作家要表达与之朝夕相处的现实,他常常会感到难以承受,蜂拥而来的真实几乎都在诉说着阴险丑恶和黑暗,真正的作家所追寻的是真理,这是一种排斥道德判断的真理,不是发泄,不是控诉或揭露,而是向人们展示高尚,高尚不是单纯的美好,而是对一切事物理解之后的超然,对善和恶一视同仁,用同情的目光看世界。</p>
-<p> 活着的力量不是来自于喊叫,也不是来自于进攻,而是忍受,去忍受生命赋予我们的责任,去忍受现实给予我们的幸福和苦难、无聊和平庸。</p>
-<p> 人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。</p>
-<p> 人的体验和欲望还有想象和理解,会填补所有不同的界限,会让一个人从他人的经历之中感受到自己的命运,就像是在不同的镜子里看到的都是自己的形象。</p>
-<p> 我们都是这个世界上的迷路者,我们都是按照自己认定的道路寻找方向,也许我们是对的,也许我们是错的,或者有时候对了有时候错了,在出生之前和死去之前,我们谁也不知道前面的时间里在等待我们的是什么。</p>
-<p> 生活是属于每个人自己的感受,不属于任何别人的看法。</p>
-<p> 人们时常流出浑浊的眼泪,并不是因为人们时常悲伤,人们在高兴时甚至是在什么事都没有的平静时刻,也会有泪流出,然后举起被社会,岁月刮伤的手指,擦去眼泪,如同掸去身上的稻草。</p>
-<p> 也许是困苦的生活损坏了人们的记忆,面对往事人们时常显得木讷,常常以不知所措的微笑搪塞过去,对自己的经历缺乏热情,仿佛是道听途说般只记得零星几点,即便是这零星几点也都是自身之外的记忆,用一两句话表达了一切。</p>
+<p>作家要表达与之朝夕相处的现实,他常常会感到难以承受,蜂拥而来的真实几乎都在诉说着阴险丑恶和黑暗,真正的作家所追寻的是真理,这是一种排斥道德判断的真理,不是发泄,不是控诉或揭露,而是向人们展示高尚,高尚不是单纯的美好,而是对一切事物理解之后的超然,对善和恶一视同仁,用同情的目光看世界。</p>
+<p>活着的力量不是来自于喊叫,也不是来自于进攻,而是忍受,去忍受生命赋予我们的责任,去忍受现实给予我们的幸福和苦难、无聊和平庸。</p>
+<p>人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。</p>
+<p>人的体验和欲望还有想象和理解,会填补所有不同的界限,会让一个人从他人的经历之中感受到自己的命运,就像是在不同的镜子里看到的都是自己的形象。</p>
+<p>我们都是这个世界上的迷路者,我们都是按照自己认定的道路寻找方向,也许我们是对的,也许我们是错的,或者有时候对了有时候错了,在出生之前和死去之前,我们谁也不知道前面的时间里在等待我们的是什么。</p>
+<p>生活是属于每个人自己的感受,不属于任何别人的看法。</p>
+<p>人们时常流出浑浊的眼泪,并不是因为人们时常悲伤,人们在高兴时甚至是在什么事都没有的平静时刻,也会有泪流出,然后举起被社会,岁月刮伤的手指,擦去眼泪,如同掸去身上的稻草。</p>
+<p>也许是困苦的生活损坏了人们的记忆,面对往事人们时常显得木讷,常常以不知所措的微笑搪塞过去,对自己的经历缺乏热情,仿佛是道听途说般只记得零星几点,即便是这零星几点也都是自身之外的记忆,用一两句话表达了一切。</p>
</div>
diff --git a/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html b/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html
index b02ebb78..81aa9750 100644
--- a/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html
+++ b/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/index.html
@@ -197,32 +197,26 @@
</blockquote>
<p>The first problem is, and personally, I believe it’s the biggest JavaScript problem ever: we don’t know what can throw an error. From a JavaScript error perspective, it’s the same as the following:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">let</span> data = “<span class="title class_">Hello</span>”;</span><br><span class="line">&#125; <span class="keyword">catch</span> (err) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(err);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>JavaScript doesn’t know; JavaScript doesn’t care. You should know.</p>
<p>Second thing, this is perfectly viable code:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> request = &#123; <span class="attr">name</span>: “test”, <span class="attr">value</span>: <span class="number">2n</span> &#125;;</span><br><span class="line"><span class="keyword">const</span> body = <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(request);</span><br><span class="line"><span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(<span class="string">&quot;https://example.com&quot;</span>, &#123;</span><br><span class="line"> <span class="attr">method</span>: “<span class="variable constant_">POST</span>”,</span><br><span class="line"> body,</span><br><span class="line">&#125;);</span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">ok</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>No errors, no linters, even though this can break your app.</p>
-<p>Right now, in my head, I can hear, “What’s the problem, just use try&#x2F;catch everywhere.” Here comes the third problem: we don’t know which one is thrown. Of course, we can somehow guess by the error message, but what about bigger services&#x2F;functions with many places where errors can happen? Are you sure you are handling all of them properly with one try&#x2F;catch?</p>
+<p>Right now, in my head, I can hear, “What’s the problem, just use try/catch everywhere.” Here comes the third problem: we don’t know which one is thrown. Of course, we can somehow guess by the error message, but what about bigger services/functions with many places where errors can happen? Are you sure you are handling all of them properly with one try/catch?</p>
<hr>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="variable">greeting_file_result</span> = File::<span class="title function_ invoke__">open</span>(“hello.txt”); </span><br><span class="line"><span class="keyword">let</span> <span class="variable">greeting_file</span> = <span class="keyword">match</span> greeting_file_result &#123; </span><br><span class="line"> <span class="title function_ invoke__">Ok</span>(file) =&gt; file, </span><br><span class="line"> <span class="title function_ invoke__">Err</span>(error) =&gt; <span class="built_in">panic!</span>(<span class="string">&quot;Problem opening the file: &#123;:?&#125;&quot;</span>, error), </span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>
-
<p>The most verbose of the three shown here and, ironically, the best one. So, first of all, Rust handles the errors using its amazing enums (they are not the same as TypeScript enums!). Without going into detail, what is important here is that it uses an enum called <code>Result</code> with two variants: <code>Ok</code> and <code>Err</code>. As you might guess, <code>Ok</code> holds a value and <code>Err</code> holds…surprise, an error :D.</p>
<p>The summary here is that Rust always know where there might be an error. And it force you to deal with it right where it appears (mostly). No hidden ones, no guessing, no breaking app with a surprise face.</p>
<p>And this approach is just better. By A MILE.</p>
<p>We cannot make TypeScript errors work like the Rust. The limiting factor here is the language itself; it doesn’t have the proper tools to do that.</p>
<p>But what we can do is try to make it similar. And make it simple:</p>
<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">type</span> <span class="title class_">Safe</span>&lt;T&gt; = </span><br><span class="line"> | &#123; </span><br><span class="line"> <span class="attr">success</span>: <span class="literal">true</span>; </span><br><span class="line"> <span class="attr">data</span>: T; </span><br><span class="line"> &#125; </span><br><span class="line"> | &#123; </span><br><span class="line"> <span class="attr">success</span>: <span class="literal">false</span>; </span><br><span class="line"> <span class="attr">error</span>: <span class="built_in">string</span>; </span><br><span class="line"> &#125;;</span><br></pre></td></tr></table></figure>
-
-<p>we do need a few try&#x2F;catches. The good thing is we only need about two, not 100,000:</p>
+<p>we do need a few try/catches. The good thing is we only need about two, not 100,000:</p>
<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(<span class="attr">promise</span>: <span class="title class_">Promise</span>&lt;T&gt;, <span class="attr">err</span>?: <span class="built_in">string</span>): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt;;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(<span class="attr">func</span>: <span class="function">() =&gt;</span> T, <span class="attr">err</span>?: <span class="built_in">string</span>): <span class="title class_">Safe</span>&lt;T&gt;;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(</span><br><span class="line"> <span class="attr">promiseOrFunc</span>: <span class="title class_">Promise</span>&lt;T&gt; | (<span class="function">() =&gt;</span> T),</span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span>,</span><br><span class="line">): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt; | <span class="title class_">Safe</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">if</span> (promiseOrFunc <span class="keyword">instanceof</span> <span class="title class_">Promise</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">safeAsync</span>(promiseOrFunc, err);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">safeSync</span>(promiseOrFunc, err);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> safeAsync&lt;T&gt;(</span><br><span class="line"> <span class="attr">promise</span>: <span class="title class_">Promise</span>&lt;T&gt;, </span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span></span><br><span class="line">): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt; &#123;</span><br><span class="line"> <span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">const</span> data = <span class="keyword">await</span> promise;</span><br><span class="line"> <span class="keyword">return</span> &#123; data, <span class="attr">success</span>: <span class="literal">true</span> &#125;;</span><br><span class="line"> &#125; <span class="keyword">catch</span> (e) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(e);</span><br><span class="line"> <span class="keyword">if</span> (err !== <span class="literal">undefined</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: err &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span> (e <span class="keyword">instanceof</span> <span class="title class_">Error</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: e.<span class="property">message</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: <span class="string">&quot;Something went wrong&quot;</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> safeSync&lt;T&gt;(</span><br><span class="line"> <span class="attr">func</span>: <span class="function">() =&gt;</span> T, </span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span></span><br><span class="line">): <span class="title class_">Safe</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">const</span> data = <span class="title function_">func</span>();</span><br><span class="line"> <span class="keyword">return</span> &#123; data, <span class="attr">success</span>: <span class="literal">true</span> &#125;;</span><br><span class="line"> &#125; <span class="keyword">catch</span> (e) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(e);</span><br><span class="line"> <span class="keyword">if</span> (err !== <span class="literal">undefined</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: err &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span> (e <span class="keyword">instanceof</span> <span class="title class_">Error</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: e.<span class="property">message</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: <span class="string">&quot;Something went wrong&quot;</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>This is just a wrapper with our <code>Safe</code> type as the return one. But sometimes simple things are all you need. Let’s combine them with the example from above.</p>
<figure class="highlight typescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> request = &#123; <span class="attr">name</span>: “test”, <span class="attr">value</span>: <span class="number">2n</span> &#125;; </span><br><span class="line"><span class="keyword">const</span> body = <span class="title function_">safe</span>( </span><br><span class="line"> <span class="function">() =&gt;</span> <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(request), </span><br><span class="line"> “<span class="title class_">Failed</span> to serialize request”, </span><br><span class="line">); </span><br><span class="line"><span class="keyword">if</span> (!body.<span class="property">success</span>) &#123; </span><br><span class="line"> <span class="comment">// handle error (body.error) </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">safe</span>( </span><br><span class="line"> <span class="title function_">fetch</span>(<span class="string">&quot;https://example.com&quot;</span>, &#123; </span><br><span class="line"> <span class="attr">method</span>: “<span class="variable constant_">POST</span>”, </span><br><span class="line"> <span class="attr">body</span>: body.<span class="property">data</span>, </span><br><span class="line"> &#125;), </span><br><span class="line">); </span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">success</span>) &#123; </span><br><span class="line"> <span class="comment">// handle error (response.error) </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">data</span>.<span class="property">ok</span>) &#123; </span><br><span class="line"> <span class="comment">// handle network error </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="comment">// handle response (body.data)</span></span><br></pre></td></tr></table></figure>
-
<p>New solution is longer, but it performs better because of the following reasons:</p>
<ul>
-<li>no try&#x2F;catch</li>
+<li>no try/catch</li>
<li>we handle each error where it occurs</li>
<li>we can specify an error message for a specific function</li>
<li>we have a nice top-to-bottom logic, all errors on top, then only the response at the bottom</li>
diff --git a/2023/05/01/Rust-虚表布局规则介绍/index.html b/2023/05/01/Rust-虚表布局规则介绍/index.html
index f4502594..84a18b0c 100644
--- a/2023/05/01/Rust-虚表布局规则介绍/index.html
+++ b/2023/05/01/Rust-虚表布局规则介绍/index.html
@@ -196,39 +196,38 @@
<blockquote>
<p>注意:Rust 虚表及其结构属于 Rust 语言的内部实现细节,不保证稳定性。本文所介绍的虚表布局仅反映本文创作时最新的 Rust 虚表结构[1],在将来 Rust 虚表结构可能会发生变化。一个 Rust 程序的正确性不应该以任何方式依赖于 Rust 虚表的结构。</p>
</blockquote>
-<h2 id="基本结构"><a href="#基本结构" class="headerlink" title="基本结构"></a>基本结构</h2><p>Rust 程序中的所有虚表均以一个固定结构的 header 开头。Header 中按顺序包含三个usize 大小的字段:drop_in_place ,size 和 align 。在 header 之后是一系列的 usize 大小字段,其数量以及含义在每个虚表中可能都不同。</p>
+<h2 id="基本结构"><a class="header-anchor" href="#基本结构">¶</a>基本结构</h2>
+<p>Rust 程序中的所有虚表均以一个固定结构的 header 开头。Header 中按顺序包含三个usize 大小的字段:drop_in_place ,size 和 align 。在 header 之后是一系列的 usize 大小字段,其数量以及含义在每个虚表中可能都不同。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">+---------------+</span><br><span class="line">| drop_in_place |</span><br><span class="line">+---------------+</span><br><span class="line">| size |</span><br><span class="line">+---------------+</span><br><span class="line">| align |</span><br><span class="line">+---------------+</span><br><span class="line">| entry1 |</span><br><span class="line">+---------------+</span><br><span class="line">| entry2 |</span><br><span class="line">+---------------+</span><br><span class="line">| entry3 |</span><br><span class="line">+---------------+</span><br></pre></td></tr></table></figure>
<p>虚表 header 中的drop_in_place 是一个函数指针,其指向的函数能够原地 drop 当前胖指针所引用的对象。size 和 align 两个域分别给出对象的大小和内存对齐,这两个域共同构成一个 std::alloc::Layout 结构,可用于释放当前胖指针所引用的对象所占据的内存。虚表 header 的存在使得 trait object 总是能被销毁和释放。例如当销毁一个 <code>Box&lt;dyn Trait&gt;</code> 时,<code>Box::&lt;dyn Trait&gt;::drop</code> 会首先调用虚表中的 drop_in_place 函数原地销毁 Box 所引用的对象,然后再调用 dealloc 函数并传递虚表中的 size 和 align 释放堆空间。</p>
<p>在虚表 header 之后是一系列的字段。在最普遍的情况下,每个字段代表一个指向 trait 所定义的函数的指针。例如,对于下列 object safe 的 trait:</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">pub</span> <span class="keyword">trait</span> <span class="title class_">Trait</span> &#123;</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">fun1</span>(&amp;<span class="keyword">self</span>);</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">fun2</span>(&amp;<span class="keyword">self</span>);</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">fun3</span>(&amp;<span class="keyword">self</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>如果类型T 实现了 Trait,那么为 T 生成的 Trait 虚表的结构为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">+--------------------------+</span><br><span class="line">| fn drop_in_place(*mut T) |</span><br><span class="line">+--------------------------+</span><br><span class="line">| size of T |</span><br><span class="line">+--------------------------+</span><br><span class="line">| align of T |</span><br><span class="line">+--------------------------+</span><br><span class="line">| fn &lt;T as Trait&gt;::fun1 |</span><br><span class="line">+--------------------------+</span><br><span class="line">| fn &lt;T as Trait&gt;::fun2 |</span><br><span class="line">+--------------------------+</span><br><span class="line">| fn &lt;T as Trait&gt;::fun3 |</span><br><span class="line">+--------------------------+</span><br></pre></td></tr></table></figure>
-
<p>Trait 中的函数按照声明顺序依次排列在虚表 header 之后。当通过一个指向 T 对象的 &amp;dyn Trait 调用 fun2 函数时,程序会先从虚表的第 5 个域中得到为 T 实现的 Trait::fun2 函数的地址,然后再调用之。</p>
-<h2 id="Super-Trait"><a href="#Super-Trait" class="headerlink" title="Super Trait"></a>Super Trait</h2><p>Object safe 的 trait 可以有 super trait。例如:</p>
+<h2 id="Super-Trait"><a class="header-anchor" href="#Super-Trait">¶</a>Super Trait</h2>
+<p>Object safe 的 trait 可以有 super trait。例如:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">pub trait Grand &#123;</span><br><span class="line"> fn grand_fun1(&amp;self);</span><br><span class="line"> fn grand_fun2(&amp;self);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">pub trait Parent : Grand &#123;</span><br><span class="line"> fn parent_fun1(&amp;self);</span><br><span class="line"> fn parent_fun2(&amp;self);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">pub trait Trait : Parent &#123;</span><br><span class="line"> fn fun(&amp;self);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>如果类型T 实现了 Trait,那么此时为 T 生成的 Trait 虚表的结构为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">+-------------------------------+</span><br><span class="line">| fn drop_in_place(*mut T) |</span><br><span class="line">+-------------------------------+</span><br><span class="line">| size of T |</span><br><span class="line">+-------------------------------+</span><br><span class="line">| align of T |</span><br><span class="line">+-------------------------------+</span><br><span class="line">| fn &lt;T as Grand&gt;::grand_fun1 |</span><br><span class="line">+-------------------------------+</span><br><span class="line">| fn &lt;T as Grand&gt;::grand_fun2 |</span><br><span class="line">+-------------------------------+</span><br><span class="line">| fn &lt;T as Parent&gt;::parent_fun1 |</span><br><span class="line">+-------------------------------+</span><br><span class="line">| fn &lt;T as Parent&gt;::parent_fun2 |</span><br><span class="line">+-------------------------------+</span><br><span class="line">| fn &lt;T as Trait&gt;::fun |</span><br><span class="line">+-------------------------------+</span><br></pre></td></tr></table></figure>
-
<p>可以看到,此时Trait 以及 Trait 的所有直接或间接父 trait 所定义的所有函数均包含在虚表 header 之后,且顺序为后序(即先排布 Trait 的父 trait 所定义的所有函数,最后再排布 Trait 所定义的所有函数)。这样的排布方式使得在得到 T 类型的 Trait 虚表的同时也同时得到了 T 类型的 Parent 虚表和 Grand 虚表。T 类型的 Grand 虚表恰好由 Trait 虚表的前五个域构成,T 类型的 Parent 虚表恰好由 Trait 虚表的前七项构成。这使得向上转换变得非常简单。</p>
<p>所谓向上转换,即 Rust 允许将&amp;dyn Trait 转换为 &amp;dyn Parent 或 &amp;dyn Grand 。在向上转换的过程中,胖指针的对象地址域保持不变,但 metadata 域可能需要进行调整,因为不同的 trait 可能具有不同的虚表地址。但在当前示例中,向上转换不需要调整 metadata 域,因为一个指向 Trait 虚表的指针同时也指向 Parent 虚表和 Grand 虚表。在后文中我们会进一步介绍需要调整 metadata 域的向上转换的情况。</p>
<blockquote>
<p>注意:目前 stable Rust 暂不支持向上转换。要使用向上转换特性,必须使用 nightly 工具链,并向源文件中添加 #![feature(trait_upcasting)] 特性开关。</p>
</blockquote>
-<h2 id="多重继承"><a href="#多重继承" class="headerlink" title="多重继承"></a>多重继承</h2><p>Trait 可以有多个 super trait。例如:</p>
+<h2 id="多重继承"><a class="header-anchor" href="#多重继承">¶</a>多重继承</h2>
+<p>Trait 可以有多个 super trait。例如:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">pub trait Base &#123;</span><br><span class="line"> fn base_fun1(&amp;self);</span><br><span class="line"> fn base_fun2(&amp;self);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">pub trait Left : Base &#123;</span><br><span class="line"> fn left_fun1(&amp;self);</span><br><span class="line"> fn left_fun2(&amp;self);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">pub trait Right : Base &#123;</span><br><span class="line"> fn right_fun1(&amp;self);</span><br><span class="line"> fn right_fun2(&amp;self);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">pub trait Trait : Left + Right &#123;</span><br><span class="line"> fn fun(&amp;self);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>如果类型T 实现了 Trait,那么此时为 T 生成的 Trait 虚表的结构为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">+-----------------------------+</span><br><span class="line">| fn drop_in_place(*mut T) |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| size of T |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| align of T |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| fn &lt;T as Base&gt;::base_fun1 |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| fn &lt;T as Base&gt;::base_fun2 |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| fn &lt;T as Left&gt;::left_fun1 |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| fn &lt;T as Left&gt;::left_fun2 |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| fn &lt;T as Right&gt;::right_fun1 |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| fn &lt;T as Right&gt;::right_fun2 |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| ptr to &lt;T as Right&gt;::vtable |</span><br><span class="line">+-----------------------------+</span><br><span class="line">| fn &lt;T as Trait&gt;::fun |</span><br><span class="line">+-----------------------------+</span><br></pre></td></tr></table></figure>
-
<p>可以看到,此时Trait 及其所有直接或间接父 trait 所定义的所有函数仍然包含在虚表内,因此通过 &amp;dyn Trait 调用的函数仍然可以直接从虚表内得到其实际目标函数的地址。另外,Trait 虚表内仍然包含有效的 Base 虚表和 Left 虚表。因此,将 &amp;dyn Trait 向上转换为 &amp;dyn Left 或 &amp;dyn Base 仍然是极其简单的,不需要调整胖指针的 metadata 域。但是,将 &amp;dyn Trait 向上转换为 &amp;dyn Right 就需要调整 metadata 域了,因为 Trait 虚表内并不包含一个有效的 Right 虚表。这也是 Trait 虚表中 ptr to <code>&lt;T as Right&gt;::vtable</code> 域的作用:在执行向上转换时,程序会读取 Trait 虚表的这个域作为得到的 &amp;dyn Right 胖指针的 metadata 。这也是 <em>Rust 向上转换与 C++ 向上转换的一个很大不同:在 C++ 中的向上转换通常并不需要访问虚表(除非需要执行跨虚继承边界的转换),但在 Rust 中向上转换可能需要访问虚表。</em></p>
<p>更加一般地,对于一个 object safe 的 traitTr,将其第一个父 trait、第一个父 trait 的第一个父 trait、…… 这一系列直接或间接父 trait 记为这个 trait 的 PrefixTrait 集合。在将 &amp;dyn Tr 向上转换时,如果转换到的目标 trait 包含在 PrefixTrait 集合内,那么这个向上转换是平凡的:不需要调整胖指针的 metadata 域。否则,这个向上转换需要在 Tr 的虚表内读取目标 trait 的虚表指针作为转换结果的 metadata 。在 Tr 的虚表结构中,位于 PrefixTrait 集合中的父 trait 只需要排布他们所定义的函数即可;对于其他父 trait 还需要额外在虚表内排布一个指向其虚表的指针用于向上转换。</p>
-<h2 id="向下转换"><a href="#向下转换" class="headerlink" title="向下转换"></a>向下转换</h2><p>Rust 提供了一个特殊的 trait:std::any::Any 。该 trait 支持向下转换,即可以将 &amp;dyn Any 转换为 T 。转换过程中会对胖指针所指向的对象的实际类型进行检查,确认其确实是一个 T 类型的对象。Any trait 的虚表结构有一些特殊;在虚表 header 之后,Any 虚表仅包含一个域,这个域直接给出胖指针指向的对象的类型标识(由一个 std::any::TypeId 类型的值表示)。例如,对于任意的 T: ‘static,编译器为其生成的 Any 虚表为:</p>
+<h2 id="向下转换"><a class="header-anchor" href="#向下转换">¶</a>向下转换</h2>
+<p>Rust 提供了一个特殊的 trait:std::any::Any 。该 trait 支持向下转换,即可以将 &amp;dyn Any 转换为 T 。转换过程中会对胖指针所指向的对象的实际类型进行检查,确认其确实是一个 T 类型的对象。Any trait 的虚表结构有一些特殊;在虚表 header 之后,Any 虚表仅包含一个域,这个域直接给出胖指针指向的对象的类型标识(由一个 std::any::TypeId 类型的值表示)。例如,对于任意的 T: 'static,编译器为其生成的 Any 虚表为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">+--------------------------+</span><br><span class="line">| fn drop_in_place(*mut T) |</span><br><span class="line">+--------------------------+</span><br><span class="line">| size of T |</span><br><span class="line">+--------------------------+</span><br><span class="line">| align of T |</span><br><span class="line">+--------------------------+</span><br><span class="line">| TypeId of T |</span><br><span class="line">+--------------------------+</span><br></pre></td></tr></table></figure>
<p>在执行向下转换时,程序首先检查转换到的类型是否与虚表中给出的TypeId 所标识的类型一致。若类型检查通过,向下转换操作可以直接返回胖指针中的指针域作为转换结果。</p>
-<h3 id="REFERENCE"><a href="#REFERENCE" class="headerlink" title="REFERENCE"></a>REFERENCE</h3><ol>
+<h3 id="REFERENCE"><a class="header-anchor" href="#REFERENCE">¶</a>REFERENCE</h3>
+<ol>
<li>Vtable format to support dyn upcasting coercion <a target="_blank" rel="noopener" href="https://rust-lang.github.io/dyn-upcasting-coercion-initiative/design-discussions/vtable-layout.*html">https://rust-lang.github.io/dyn-upcasting-coercion-initiative/design-discussions/vtable-layout.*html</a>*</li>
</ol>
diff --git a/2023/05/02/Rust-Partial-语义/index.html b/2023/05/02/Rust-Partial-语义/index.html
index b2745990..d56cbb23 100644
--- a/2023/05/02/Rust-Partial-语义/index.html
+++ b/2023/05/02/Rust-Partial-语义/index.html
@@ -195,15 +195,16 @@
<blockquote>
<p>在Rust中,PartialEq和PartialOrd trait处理了不是所有值都可以相互比较的情况。</p>
</blockquote>
-<h2 id="PartialEq-Trait"><a href="#PartialEq-Trait" class="headerlink" title="PartialEq Trait"></a>PartialEq Trait</h2><p>PartialEq trait用于定义值相等性的比较。它的设计允许类型的值之间进行相等(<code>==</code>)和不等(<code>!=</code>)的比较。与其对应的 Eq trait 确保一个类型的所有值都是可以可靠比较的,即满足等价关系的特性,如自反性、对称性和传递性。</p>
+<h2 id="PartialEq-Trait"><a class="header-anchor" href="#PartialEq-Trait">¶</a>PartialEq Trait</h2>
+<p>PartialEq trait用于定义值相等性的比较。它的设计允许类型的值之间进行相等(<code>==</code>)和不等(<code>!=</code>)的比较。与其对应的 Eq trait 确保一个类型的所有值都是可以可靠比较的,即满足等价关系的特性,如自反性、对称性和传递性。</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">eq</span>(&amp;<span class="keyword">self</span>, other: &amp;<span class="keyword">Self</span>) <span class="punctuation">-&gt;</span> <span class="type">bool</span>;</span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">ne</span>(&amp;<span class="keyword">self</span>, other: &amp;<span class="keyword">Self</span>) <span class="punctuation">-&gt;</span> <span class="type">bool</span>;</span><br></pre></td></tr></table></figure>
-
<p>在大多数情况下,类型的值都能够完全比较相等性,这时可以实现Eq。然而,对于一些特殊类型的值,如浮点数,由于存在无穷大的正负值和NaN值,导致它们的比较更加复杂。例如,根据IEEE浮点数的标准,NaN与任何值(包括它自己)比较都不相等。</p>
-<h2 id="PartialOrd-Trait"><a href="#PartialOrd-Trait" class="headerlink" title="PartialOrd Trait"></a>PartialOrd Trait</h2><p>PartialOrd trait用于定义值之间的大小比较。类似于PartialEq,它允许部分比较大小,返回一个Option,表示比较结果可能存在,也可能不存在(即比较无法进行时返回None):</p>
+<h2 id="PartialOrd-Trait"><a class="header-anchor" href="#PartialOrd-Trait">¶</a>PartialOrd Trait</h2>
+<p>PartialOrd trait用于定义值之间的大小比较。类似于PartialEq,它允许部分比较大小,返回一个Option,表示比较结果可能存在,也可能不存在(即比较无法进行时返回None):</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">partial_cmp</span>(&amp;<span class="keyword">self</span>, other: &amp;<span class="keyword">Self</span>) <span class="punctuation">-&gt;</span> <span class="type">Option</span>&lt;Ordering&gt;;</span><br></pre></td></tr></table></figure>
-
<p>在全部比较可能的场景,我们会使用Ord trait,它要求实现cmp方法,总是返回一个Ordering,表示两个值之间的确切比较关系。Ord是在所有值都能够比较时使用的,例如整数和字符串。</p>
-<h2 id="设计用意和解决的问题"><a href="#设计用意和解决的问题" class="headerlink" title="设计用意和解决的问题"></a>设计用意和解决的问题</h2><p>Rust 设计 PartialEq 和 PartialOrd trait 主要出于以下几个理由:</p>
+<h2 id="设计用意和解决的问题"><a class="header-anchor" href="#设计用意和解决的问题">¶</a>设计用意和解决的问题</h2>
+<p>Rust 设计 PartialEq 和 PartialOrd trait 主要出于以下几个理由:</p>
<ul>
<li>非总序理念:并不是所有类型都有一个全局的排序方法。例如,复数之间就没有一个自然的大小顺序。为了避免为这些类型人为地赋予一个排序方法,Rust 提供了一个只需部分实现序列操作的选择。</li>
<li>IEEE 浮点数标准:由于浮点数标准定义了特殊值(NaN, 正负无穷),以及NaN不等于自身的规则,浮点数在一些情况下不能进行相等性或大小比较。</li>
diff --git a/2023/05/03/Rust-NewType-模式/index.html b/2023/05/03/Rust-NewType-模式/index.html
index b14dadc3..24f2a78a 100644
--- a/2023/05/03/Rust-NewType-模式/index.html
+++ b/2023/05/03/Rust-NewType-模式/index.html
@@ -193,14 +193,15 @@
</div>
<div class="post-content">
<p>New Type模式是一种软件设计模式,用于在已有类型的基础上创建一个新的类型。在Rust中,这通常是通过定义一个结构体,其中只包含一个单一成员。这个结构体(New Type)对外提供了一个新的、独立的类型,用于对原始类型增加额外的语义或限制。</p>
-<h2 id="加强类型安全"><a href="#加强类型安全" class="headerlink" title="加强类型安全"></a>加强类型安全</h2><figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Meters</span>(<span class="type">f64</span>);</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Feet</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_meters</span> = <span class="title function_ invoke__">Meters</span>(<span class="number">100.0</span>);</span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_feet</span> = <span class="title function_ invoke__">Feet</span>(<span class="number">328.084</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 编译器会防止以下代码执行,因为类型不匹配</span></span><br><span class="line"><span class="comment">// let wrong_length = Meters(length_in_feet); // 编译错误</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 正确的构造</span></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">add_lengths</span>(length1: Meters, length2: Meters) <span class="punctuation">-&gt;</span> Meters &#123;</span><br><span class="line"> <span class="title function_ invoke__">Meters</span>(length1.<span class="number">0</span> + length2.<span class="number">0</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
+<h2 id="加强类型安全"><a class="header-anchor" href="#加强类型安全">¶</a>加强类型安全</h2>
+<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Meters</span>(<span class="type">f64</span>);</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Feet</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_meters</span> = <span class="title function_ invoke__">Meters</span>(<span class="number">100.0</span>);</span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_feet</span> = <span class="title function_ invoke__">Feet</span>(<span class="number">328.084</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 编译器会防止以下代码执行,因为类型不匹配</span></span><br><span class="line"><span class="comment">// let wrong_length = Meters(length_in_feet); // 编译错误</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 正确的构造</span></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">add_lengths</span>(length1: Meters, length2: Meters) <span class="punctuation">-&gt;</span> Meters &#123;</span><br><span class="line"> <span class="title function_ invoke__">Meters</span>(length1.<span class="number">0</span> + length2.<span class="number">0</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>这个例子使用 newtype 模式避免将原始类型f64用于不同的量度,从而增强了类型的安全性。</p>
-<h2 id="实现特定-trait"><a href="#实现特定-trait" class="headerlink" title="实现特定 trait"></a>实现特定 trait</h2><figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Kilometers</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">impl</span> <span class="title class_">Kilometers</span> &#123;</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">to_miles</span>(&amp;<span class="keyword">self</span>) <span class="punctuation">-&gt;</span> <span class="type">f64</span> &#123;</span><br><span class="line"> <span class="keyword">self</span>.<span class="number">0</span> * <span class="number">0.621371</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">distance</span> = <span class="title function_ invoke__">Kilometers</span>(<span class="number">10.0</span>);</span><br><span class="line"><span class="built_in">println!</span>(<span class="string">&quot;The distance in miles is &#123;&#125;&quot;</span>, distance.<span class="title function_ invoke__">to_miles</span>());</span><br></pre></td></tr></table></figure>
-
+<h2 id="实现特定-trait"><a class="header-anchor" href="#实现特定-trait">¶</a>实现特定 trait</h2>
+<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Kilometers</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">impl</span> <span class="title class_">Kilometers</span> &#123;</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">to_miles</span>(&amp;<span class="keyword">self</span>) <span class="punctuation">-&gt;</span> <span class="type">f64</span> &#123;</span><br><span class="line"> <span class="keyword">self</span>.<span class="number">0</span> * <span class="number">0.621371</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">distance</span> = <span class="title function_ invoke__">Kilometers</span>(<span class="number">10.0</span>);</span><br><span class="line"><span class="built_in">println!</span>(<span class="string">&quot;The distance in miles is &#123;&#125;&quot;</span>, distance.<span class="title function_ invoke__">to_miles</span>());</span><br></pre></td></tr></table></figure>
<p>这里,Kilometers有一个方法to_miles,该方法是不会影响其他f64数据的。如果我们有另一个表示温度的f64类型,就不会意外调用到与距离相关的方法。</p>
<p>New Type模式同样适用于对<code>Box&lt;dyn SomeTrait&gt;</code>类型的包装,这可以在需要动态分派(动态调用实现了某个接口的不同类型的对象的方法)的时候提供便利。通过创建一个New Type来包装这样的<code>Box&lt;dyn SomeTrait&gt;</code>类型,可以提供自定义的方法或实现更多的trait,同时也可以让API更加清晰和易于使用。</p>
-<h2 id="零成本抽象"><a href="#零成本抽象" class="headerlink" title="零成本抽象"></a>零成本抽象</h2><p>在Rust中,New Type模式不仅是类型安全的,还是一种零成本抽象。这是因为Rust编译器在编译时期会进行足够的优化,以确保New Type的使用没有运行时开销。 Rust的零成本抽象原则确保了抽象不会引入额外的运行时成本。例如,当你使用Meters这样的New Type时,Rust确保:</p>
+<h2 id="零成本抽象"><a class="header-anchor" href="#零成本抽象">¶</a>零成本抽象</h2>
+<p>在Rust中,New Type模式不仅是类型安全的,还是一种零成本抽象。这是因为Rust编译器在编译时期会进行足够的优化,以确保New Type的使用没有运行时开销。 Rust的零成本抽象原则确保了抽象不会引入额外的运行时成本。例如,当你使用Meters这样的New Type时,Rust确保:</p>
<ol>
<li>无额外内存开销:Meters只包含一个f64,在内存中的表现和单独的f64是一样的。</li>
<li>无额外运行时开销:使用Meters时,性能和直接使用f64完全相同。编译器会移除任何关于New Type的包装和解包的代码。</li>
diff --git a/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html b/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html
index e208733c..a44f767e 100644
--- a/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html
+++ b/2023/05/24/Rust-闭包-lifetime-may-not-live-long-enough-问题/index.html
@@ -194,13 +194,12 @@
<div class="post-content">
<p>代码:</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">...</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">handlers</span>(<span class="keyword">self</span>) <span class="punctuation">-&gt;</span> crate::server::request::Handlers &#123;</span><br><span class="line"> <span class="built_in">vec!</span>[(</span><br><span class="line"> <span class="string">&quot;/tree&quot;</span>,</span><br><span class="line"> routing::<span class="title function_ invoke__">get</span>(<span class="keyword">move</span> || <span class="keyword">async</span> &#123;</span><br><span class="line"> (</span><br><span class="line"> StatusCode::OK,</span><br><span class="line"> <span class="title function_ invoke__">Json</span>(json!(<span class="keyword">self</span>.<span class="title function_ invoke__">clone</span>().<span class="title function_ invoke__">tree</span>(<span class="keyword">self</span>.<span class="title function_ invoke__">clone</span>().root))),</span><br><span class="line"> )</span><br><span class="line"> &#125;),</span><br><span class="line"> )]</span><br><span class="line"> &#125;</span><br><span class="line">...</span><br></pre></td></tr></table></figure>
-
<p>编译错误:</p>
<figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">error: lifetime may not live long enough</span><br><span class="line"> --&gt; src/storage/filesystem/mod.rs:45:34</span><br><span class="line"> |</span><br><span class="line">45 | routing::get(move || async &#123;</span><br><span class="line"> | __________________________-------_^</span><br><span class="line"> | | | |</span><br><span class="line"> | | | return type of closure `&#123;async block@src/storage/filesystem/mod.rs:45:34: 50:14&#125;` contains a lifetime `&#x27;2`</span><br><span class="line"> | | lifetime `&#x27;1` represents this closure&#x27;s body</span><br><span class="line">46 | | (</span><br><span class="line">47 | | StatusCode::OK,</span><br><span class="line">48 | | Json(json!(self.clone().tree(self.clone().root))),</span><br><span class="line">49 | | )</span><br><span class="line">50 | | &#125;),</span><br><span class="line"> | |_____________^ returning this value requires that `&#x27;1` must outlive `&#x27;2`</span><br><span class="line"> |</span><br><span class="line"> = note: closure implements `Fn`, so references to captured variables can&#x27;t escape the closure</span><br></pre></td></tr></table></figure>
-
<p>这是因为 <code>handlers</code> 里面的闭包捕获了一个引用,并且尝试返回一个包含该引用的值导致的。</p>
<p>细说就是:闭包内部使用了 <code>self.clone()</code> 来获取一个新的实例,然后在异步块中返回一个 JSON 对象,这个 JSON 对象依赖于 <code>self.tree()</code> 的结果。因为闭包捕获了 <code>self</code> 的引用,所以它必须保证 <code>self</code> 在闭包执行完毕后仍然有效。</p>
-<p>解决这个问题的思路是:确保闭包中的所有引用都在闭包执行完毕之前就不再被使用。<br>就是说,要将闭包的作用域限制在一个更短的生命周期内,或者使用其他方式来避免闭包捕获长期存在的引用:</p>
+<p>解决这个问题的思路是:确保闭包中的所有引用都在闭包执行完毕之前就不再被使用。<br>
+就是说,要将闭包的作用域限制在一个更短的生命周期内,或者使用其他方式来避免闭包捕获长期存在的引用:</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">...</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">handlers</span>(<span class="keyword">self</span>) <span class="punctuation">-&gt;</span> crate::server::request::Handlers &#123;</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">tree</span> = json!(<span class="keyword">self</span>.<span class="title function_ invoke__">clone</span>().<span class="title function_ invoke__">tree</span>(<span class="keyword">self</span>.<span class="title function_ invoke__">clone</span>().root));</span><br><span class="line"> <span class="built_in">vec!</span>[(</span><br><span class="line"> <span class="string">&quot;/tree&quot;</span>,</span><br><span class="line"> routing::<span class="title function_ invoke__">get</span>(<span class="keyword">move</span> || <span class="keyword">async</span> &#123; (StatusCode::OK, <span class="title function_ invoke__">Json</span>(tree)) &#125;),</span><br><span class="line"> )]</span><br><span class="line"> &#125;</span><br><span class="line">...</span><br></pre></td></tr></table></figure>
</div>
diff --git a/2023/06/17/发热及超高热危象/index.html b/2023/06/17/发热及超高热危象/index.html
index a5346be7..4bb0f9d7 100644
--- a/2023/06/17/发热及超高热危象/index.html
+++ b/2023/06/17/发热及超高热危象/index.html
@@ -199,27 +199,39 @@
</div>
<div class="post-content">
<p>应急诊断与处理放在开头,理论放在后面</p>
-<h2 id="处理"><a href="#处理" class="headerlink" title="处理"></a>处理</h2><h3 id="支持治疗"><a href="#支持治疗" class="headerlink" title="支持治疗"></a>支持治疗</h3><p>患者出现神志改变、呼吸窘迫、血流动力学不稳定等危及生命的症状与体征时,立即实施监护、建立静脉通路、气道管理、补液以及氧疗,必要时予以呼吸支持治疗。</p>
-<h3 id="超高热危象的处理"><a href="#超高热危象的处理" class="headerlink" title="超高热危象的处理"></a>超高热危象的处理</h3><p>一旦出现超高热,应以最快的速度降低中心体温、代谢率,以打断超高热引起的恶性循环,同时防治各种并发症。其中,降温是抢救超高热危象的主要措施。降温速度决定预后,应在1小时内使直肠温度降至38.5℃以内。</p>
-<h3 id="对症处理"><a href="#对症处理" class="headerlink" title="对症处理"></a>对症处理</h3><p>发热的对症治疗包括:</p>
+<h2 id="处理"><a class="header-anchor" href="#处理">¶</a>处理</h2>
+<h3 id="支持治疗"><a class="header-anchor" href="#支持治疗">¶</a>支持治疗</h3>
+<p>患者出现神志改变、呼吸窘迫、血流动力学不稳定等危及生命的症状与体征时,立即实施监护、建立静脉通路、气道管理、补液以及氧疗,必要时予以呼吸支持治疗。</p>
+<h3 id="超高热危象的处理"><a class="header-anchor" href="#超高热危象的处理">¶</a>超高热危象的处理</h3>
+<p>一旦出现超高热,应以最快的速度降低中心体温、代谢率,以打断超高热引起的恶性循环,同时防治各种并发症。其中,降温是抢救超高热危象的主要措施。降温速度决定预后,应在1小时内使直肠温度降至38.5℃以内。</p>
+<h3 id="对症处理"><a class="header-anchor" href="#对症处理">¶</a>对症处理</h3>
+<p>发热的对症治疗包括:</p>
<ol>
<li>物理降温:一般可用冷毛巾湿敷额部,每5~10分钟更换1次,或用冰袋置于额、枕后、颈、腋和腹股沟处降温,或用25%~50%乙醇擦浴。或头置冰帽、冰水灌肠、冷盐水洗胃,或将患者置于空调房内(使室温维持在27℃左右)。应根据具体条件选用。</li>
-<li>药物降温:视发热程度可采用口服或肌注解热镇痛药。常用的口服解热镇痛药有:阿司匹林(0.3~0.6g&#x2F;次)、对乙酰氨基酚(0.3~0.5g&#x2F;次)、布洛芬(0.2~0.4g&#x2F;次)、安乃近(0.25~0.5g&#x2F;次)、解热止痛片(APC片,1~2片&#x2F;次)、速效伤风胶囊(1~2粒&#x2F;次)、复方对乙酰氨基酚片(1~2片&#x2F;次)等。常用的注射用解热镇痛药有:阿司匹林精氨酸盐(0.5~1.0g&#x2F;次)、阿司匹林赖氨酸盐(赖氨匹林,0.9~1.8g&#x2F;次)、对乙酰氨基酚(0.15~0.25g&#x2F;次)、息热痛注射液(2ml&#x2F;次)、复方氨林巴比妥注射液(1支&#x2F;次)等。高热者病情需要时可短期应用肾上腺皮质激素,如地塞米松5~10mg静注或肌注;或以地塞米松12~20mg&#x2F;d或氢化可的松300~600mg&#x2F;d静滴。</li>
+<li>药物降温:视发热程度可采用口服或肌注解热镇痛药。常用的口服解热镇痛药有:阿司匹林(0.3~0.6g/次)、对乙酰氨基酚(0.3~0.5g/次)、布洛芬(0.2~0.4g/次)、安乃近(0.25~0.5g/次)、解热止痛片(APC片,1~2片/次)、速效伤风胶囊(1~2粒/次)、复方对乙酰氨基酚片(1~2片/次)等。常用的注射用解热镇痛药有:阿司匹林精氨酸盐(0.5~1.0g/次)、阿司匹林赖氨酸盐(赖氨匹林,0.9~1.8g/次)、对乙酰氨基酚(0.15~0.25g/次)、息热痛注射液(2ml/次)、复方氨林巴比妥注射液(1支/次)等。高热者病情需要时可短期应用肾上腺皮质激素,如地塞米松5~10mg静注或肌注;或以地塞米松12~20mg/d或氢化可的松300~600mg/d静滴。</li>
</ol>
-<h3 id="抗生素经验性应用"><a href="#抗生素经验性应用" class="headerlink" title="抗生素经验性应用"></a>抗生素经验性应用</h3><p>对感染病例早期抗生素经验性应用是有益的。一般来讲,若有明确的病原菌感染,则选择覆盖特定病原菌感染的窄谱抗生素;若不明确,可选择覆盖革兰阳性和革兰阴性需氧菌、厌氧菌的广谱抗生素。</p>
-<h3 id="诊断性治疗"><a href="#诊断性治疗" class="headerlink" title="诊断性治疗"></a>诊断性治疗</h3><p>当发热病因一时难以查明时,在不影响进一步检查的情况下,可按可能性较大的病因进行诊断性治疗(如疑疟疾,可试用氯喹;疑阿米巴性肝脓肿,行抗阿米巴治疗;疑结核病行抗结核治疗时间以3~4周以上为宜),期望获得疗效而做出临床诊断。诊断性治疗应选用特异性强、疗效确切及安全性大的治疗药物,剂量应充足并完成整个疗程,无特殊原因不得随便更换试验药物。</p>
-<h2 id="诊断"><a href="#诊断" class="headerlink" title="诊断"></a>诊断</h2><h3 id="病史"><a href="#病史" class="headerlink" title="病史"></a>病史</h3><p>详细询问病史对发热原因的诊断常能提供重要线索。此外,对发热患者定期检测体温,密切观察热度的高低、时限、热型等也有重要价值。</p>
+<h3 id="抗生素经验性应用"><a class="header-anchor" href="#抗生素经验性应用">¶</a>抗生素经验性应用</h3>
+<p>对感染病例早期抗生素经验性应用是有益的。一般来讲,若有明确的病原菌感染,则选择覆盖特定病原菌感染的窄谱抗生素;若不明确,可选择覆盖革兰阳性和革兰阴性需氧菌、厌氧菌的广谱抗生素。</p>
+<h3 id="诊断性治疗"><a class="header-anchor" href="#诊断性治疗">¶</a>诊断性治疗</h3>
+<p>当发热病因一时难以查明时,在不影响进一步检查的情况下,可按可能性较大的病因进行诊断性治疗(如疑疟疾,可试用氯喹;疑阿米巴性肝脓肿,行抗阿米巴治疗;疑结核病行抗结核治疗时间以3~4周以上为宜),期望获得疗效而做出临床诊断。诊断性治疗应选用特异性强、疗效确切及安全性大的治疗药物,剂量应充足并完成整个疗程,无特殊原因不得随便更换试验药物。</p>
+<h2 id="诊断"><a class="header-anchor" href="#诊断">¶</a>诊断</h2>
+<h3 id="病史"><a class="header-anchor" href="#病史">¶</a>病史</h3>
+<p>详细询问病史对发热原因的诊断常能提供重要线索。此外,对发热患者定期检测体温,密切观察热度的高低、时限、热型等也有重要价值。</p>
<ol>
-<li><p>起病方式: 一般而言,急性感染性疾病起病多较急骤,常有受凉、疲劳、外伤或进食不洁食物等病史,若发热前有明显寒战者,多属化脓性细菌感染或疟疾;而一般非感染性发热,以及结核、伤寒、立克次体和病毒感染多无寒战。</p>
+<li>
+<p>起病方式: 一般而言,急性感染性疾病起病多较急骤,常有受凉、疲劳、外伤或进食不洁食物等病史,若发热前有明显寒战者,多属化脓性细菌感染或疟疾;而一般非感染性发热,以及结核、伤寒、立克次体和病毒感染多无寒战。</p>
</li>
-<li><p>发热的分期与分型</p>
+<li>
+<p>发热的分期与分型</p>
+<ol>
+<li>体温上升期:表现为疲乏、不适感、肌肉酸痛、皮肤苍白、干燥、无汗、畏寒或寒战等症状。体温上升有两种形式:
<ol>
-<li>体温上升期:表现为疲乏、不适感、肌肉酸痛、皮肤苍白、干燥、无汗、畏寒或寒战等症状。体温上升有两种形式:<ol>
<li>骤升型:体温在数小时内达39~40℃以上,常伴有寒战</li>
<li>缓升型:体温于数日内缓慢上升达高峰。</li>
</ol>
</li>
-<li>高热持续期:此时体温已达高峰,临床表现为皮肤潮红而灼热,呼吸加快加强,可有出汗。此期持续数小时、数天或数周。其热型(体温曲线)可表现为:<ol>
+<li>高热持续期:此时体温已达高峰,临床表现为皮肤潮红而灼热,呼吸加快加强,可有出汗。此期持续数小时、数天或数周。其热型(体温曲线)可表现为:
+<ol>
<li>稽留热(continued fever):体温持续于39~40℃左右,达数天或数周,24小时波动范围不超过1℃。见于肺炎、伤寒、斑疹伤寒(早期)等。</li>
<li>弛张热(remittent fever):体温在39℃以上,但波动幅度大,24小时内体温差达2℃以上,体温最低时一般仍高于正常水平。见于脓毒血症、风湿热、重症结核、化脓性炎症如肝脓肿等</li>
<li>间歇热(intermittent fever):高热期与无热期交替地出现。体温波动幅度可达数度。无热期(间歇期)持续1天乃至数天,反复发作。见于疟疾、急性肾盂肾炎、局限性化脓性感染等。</li>
@@ -227,9 +239,9 @@
<li>波状热(undulant fever):体温逐渐升高达39℃或以上,数天后又逐渐下降至正常水平,数天后又逐渐升高,如此反复多次,常见于布鲁菌病、恶性淋巴瘤等。</li>
<li>不规则热(irregular fever):发热持续时间不定,变动无规律,可见于肺结核、感染性心内膜炎等。</li>
</ol>
-<p> </p>
</li>
-<li>体温下降期: 由于机体的防御功能与适当的治疗,疾病得到控制,体温恢复正常。体温下降的方式有两种:<ol>
+<li>体温下降期: 由于机体的防御功能与适当的治疗,疾病得到控制,体温恢复正常。体温下降的方式有两种:
+<ol>
<li>骤降(crisis):体温于数小时内迅速降至正常,有时可低于正常,常伴有大汗。常见于疟疾、急性肾盂肾炎、肺炎及输液反应等。</li>
<li>渐降(lysis):体温于数天内逐渐降至正常。如伤寒、风湿热等</li>
</ol>
@@ -237,45 +249,63 @@
</ol>
</li>
</ol>
-<h4 id="伴随症状"><a href="#伴随症状" class="headerlink" title="伴随症状"></a>伴随症状</h4><p>重视具有定位意义的伴发的局部症状,以便确定主要病变在哪个系统。如发热伴有鼻塞流涕、咽痛、咳嗽,而一般情况良好者多为上呼吸道感染,若有胸痛、咯铁锈色痰和呼吸困难者,则多为下呼吸道感染,如肺炎。发热伴神经系统症状,如头痛、呕吐、昏迷、惊厥、脑膜刺激征等则表示病变在中枢神经系统,应考虑各种脑膜炎、脑炎、中暑、急性脑卒中等;但儿童易有高热惊厥,不一定有严重脑部病变。发热伴有肋椎角、腰肋部疼痛及尿频、脓尿、血尿者提示多为泌尿系统感染。发热伴有明显关节痛或关节炎症状者应多考虑风湿热等结缔组织疾病。发热伴有恶心呕吐、腹痛、腹泻者,应多考虑急性胃肠道炎症。发热、黄疸伴右上腹痛应注意肝胆感染。依此类推。</p>
-<h3 id="流行病学"><a href="#流行病学" class="headerlink" title="流行病学"></a>流行病学</h3><p>如患者来自的地区、年龄、性别、职业、发病季节、旅游史、接触感染史等,尤其是传染病的流行病学史非常重要。如布鲁菌病多见于从事畜牧业(尤其是动物接生)的人群中;同性恋者及静注毒品成瘾者的发热待查以艾滋病或合并机会性感染的可能性较大</p>
-<h3 id="体态"><a href="#体态" class="headerlink" title="体态"></a>体态</h3><p>遇急重发热患者,应首先测呼吸、脉搏、血压等重要生命体征,并快速进行全面的体格检查,重点检查皮肤、黏膜有无皮疹、淤点以及肝、脾、淋巴结肿大等。发热伴有中毒性休克时,患者面色青灰,脉细速,血压下降或测不出,见于休克型肺炎、暴发性流行性脑脊髓膜炎、中毒性菌痢、脓毒症、流行性出血热等。</p>
-<h4 id="面容"><a href="#面容" class="headerlink" title="面容"></a>面容</h4><p>一般急性感染多呈急热面容。伤寒、副伤寒者常表情淡漠,即所谓“伤寒面容”。斑疹伤寒、恙虫病、流行性出血热患者常呈醉酒样面容。猩红热患者见口周苍白。麻疹患者常见眼睑水肿、结膜充血、分泌物增多等。急性白血病、再生障碍性贫血和恶性组织细胞病常因贫血亦可呈面色苍白。发热伴面部蝶形红斑是播散性红斑狼疮的特殊病症。口唇疱疹可见于大叶性肺炎、间日疟、流行性脑脊髓膜炎、流行性感冒、大肠杆菌败血症等。</p>
-<h4 id="皮肤特征"><a href="#皮肤特征" class="headerlink" title="皮肤特征"></a>皮肤特征</h4><p>注意有无皮疹及出血点。皮肤多汗可见于结核病、风湿热、败血症、恶性淋巴瘤。皮肤发疹可见于猩红热、麻疹、风疹、斑疹伤寒、伤寒、水痘、恙虫病、传染性单核细胞增多症、丹毒、红斑狼疮、急性皮肌炎等,根据其特征性皮疹及出疹日期可对急性发疹性传染病作出诊断:</p>
+<h4 id="伴随症状"><a class="header-anchor" href="#伴随症状">¶</a>伴随症状</h4>
+<p>重视具有定位意义的伴发的局部症状,以便确定主要病变在哪个系统。如发热伴有鼻塞流涕、咽痛、咳嗽,而一般情况良好者多为上呼吸道感染,若有胸痛、咯铁锈色痰和呼吸困难者,则多为下呼吸道感染,如肺炎。发热伴神经系统症状,如头痛、呕吐、昏迷、惊厥、脑膜刺激征等则表示病变在中枢神经系统,应考虑各种脑膜炎、脑炎、中暑、急性脑卒中等;但儿童易有高热惊厥,不一定有严重脑部病变。发热伴有肋椎角、腰肋部疼痛及尿频、脓尿、血尿者提示多为泌尿系统感染。发热伴有明显关节痛或关节炎症状者应多考虑风湿热等结缔组织疾病。发热伴有恶心呕吐、腹痛、腹泻者,应多考虑急性胃肠道炎症。发热、黄疸伴右上腹痛应注意肝胆感染。依此类推。</p>
+<h3 id="流行病学"><a class="header-anchor" href="#流行病学">¶</a>流行病学</h3>
+<p>如患者来自的地区、年龄、性别、职业、发病季节、旅游史、接触感染史等,尤其是传染病的流行病学史非常重要。如布鲁菌病多见于从事畜牧业(尤其是动物接生)的人群中;同性恋者及静注毒品成瘾者的发热待查以艾滋病或合并机会性感染的可能性较大</p>
+<h3 id="体态"><a class="header-anchor" href="#体态">¶</a>体态</h3>
+<p>遇急重发热患者,应首先测呼吸、脉搏、血压等重要生命体征,并快速进行全面的体格检查,重点检查皮肤、黏膜有无皮疹、淤点以及肝、脾、淋巴结肿大等。发热伴有中毒性休克时,患者面色青灰,脉细速,血压下降或测不出,见于休克型肺炎、暴发性流行性脑脊髓膜炎、中毒性菌痢、脓毒症、流行性出血热等。</p>
+<h4 id="面容"><a class="header-anchor" href="#面容">¶</a>面容</h4>
+<p>一般急性感染多呈急热面容。伤寒、副伤寒者常表情淡漠,即所谓“伤寒面容”。斑疹伤寒、恙虫病、流行性出血热患者常呈醉酒样面容。猩红热患者见口周苍白。麻疹患者常见眼睑水肿、结膜充血、分泌物增多等。急性白血病、再生障碍性贫血和恶性组织细胞病常因贫血亦可呈面色苍白。发热伴面部蝶形红斑是播散性红斑狼疮的特殊病症。口唇疱疹可见于大叶性肺炎、间日疟、流行性脑脊髓膜炎、流行性感冒、大肠杆菌败血症等。</p>
+<h4 id="皮肤特征"><a class="header-anchor" href="#皮肤特征">¶</a>皮肤特征</h4>
+<p>注意有无皮疹及出血点。皮肤多汗可见于结核病、风湿热、败血症、恶性淋巴瘤。皮肤发疹可见于猩红热、麻疹、风疹、斑疹伤寒、伤寒、水痘、恙虫病、传染性单核细胞增多症、丹毒、红斑狼疮、急性皮肌炎等,根据其特征性皮疹及出疹日期可对急性发疹性传染病作出诊断:</p>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E6%A0%B9%E6%8D%AE%E7%89%B9%E5%BE%81%E6%80%A7%E7%9A%AE%E7%96%B9%E5%8F%8A%E5%87%BA%E7%96%B9%E6%97%A5%E6%9C%9F%E5%AF%B9%E6%80%A5%E6%80%A7%E5%8F%91%E7%96%B9%E6%80%A7%E4%BC%A0%E6%9F%93%E7%97%85%E4%BD%9C%E5%87%BA%E8%AF%8A%E6%96%AD.png" alt="根据特征性皮疹及出疹日期对急性发疹性传染病作出诊断.png"></p>
<p>注意有无皮疹及出血点。皮肤多汗可见于结核病、风湿热、败血症、恶性淋巴瘤。皮肤发疹可见于猩红热、麻疹、风疹、斑疹伤寒、伤寒、水痘、恙虫病、传染性单核细胞增多症、丹毒、红斑狼疮、急性皮肌炎等,根据其特征性皮疹及出疹日期可对急性发疹性传染病作出诊断。</p>
-<h4 id="淋巴结肿大"><a href="#淋巴结肿大" class="headerlink" title="淋巴结肿大"></a>淋巴结肿大</h4><p>注意有无皮疹及出血点。皮肤多汗可见于结核病、风湿热、败血症、恶性淋巴瘤。皮肤发疹可见于猩红热、麻疹、风疹、斑疹伤寒、伤寒、水痘、恙虫病、传染性单核细胞增多症、丹毒、红斑狼疮、急性皮肌炎等,根据其特征性皮疹及出疹日期可对急性发疹性传染病作出诊断</p>
-<h4 id="脾大"><a href="#脾大" class="headerlink" title="脾大"></a>脾大</h4><p>注意有无皮疹及出血点。皮肤多汗可见于结核病、风湿热、败血症、恶性淋巴瘤。皮肤发疹可见于猩红热、麻疹、风疹、斑疹伤寒、伤寒、水痘、恙虫病、传染性单核细胞增多症、丹毒、红斑狼疮、急性皮肌炎等,根据其特征性皮疹及出疹日期可对急性发疹性传染病作出诊断。</p>
-<h4 id="胸部体征"><a href="#胸部体征" class="headerlink" title="胸部体征"></a>胸部体征</h4><p>如闻及肺部干湿性啰音或实变体征等,应考虑呼吸系统感染;发热伴有栓塞、心脏杂音,尤其是原有器质性心脏病者心脏杂音发生明显改变时,应注意感染性心内膜炎;发热伴心包摩擦音或心包积液体征,常提示心包炎。而急性心肌炎常表现为发热与心率不成比例,心率增快常超过发热程度。</p>
-<h4 id="肌肉与关节"><a href="#肌肉与关节" class="headerlink" title="肌肉与关节"></a>肌肉与关节</h4><p>发热伴肌肉疼痛见于许多传染病,一般无特殊性诊断意义,但如腓肠肌剧烈疼痛,甚至不能站立或行走,常提示钩端螺旋体病。局部肌痛兼有发热与白细胞增多,须检查有无深部脓肿,尤其是药物肌内注射引起的臀肌无菌性脓肿。发热伴多关节肿痛,病因常为各种关节炎,如化脓性、感染中毒性与变态反应性等,而淋病性与结核性关节炎常侵犯单个的大关节。</p>
-<h4 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h4><p>长期不明原因的发热患者尤应注意隐蔽性病灶,如肝脏、膈下、脊椎、盆腔、鼻窦、乳突等局部脓肿。肝脓肿是引起长期发热的常见病因,在早期不一定有局部症状。脊椎病变如结核或脓毒症后脊椎旁化脓性病灶在体检时易被忽略。男性患者的睾丸与附睾检查、女性患者的盆腔检查,以及所有发热待查患者的直肠指检或乙状结肠镜检查均应列为常规。眼底检查也应作为常规,粟粒性结核可有眼脉络膜结核结节,年老患者肛门指检可发现前列腺脓肿。此外,腹部与盆腔手术(包括引产)后发热可由腹腔或盆腔内隐蔽的脓肿引起。</p>
-<h3 id="辅助检查"><a href="#辅助检查" class="headerlink" title="辅助检查"></a>辅助检查</h3><p>对发热患者行辅助检查时必须掌握检查目的明确,并以简便快捷为原则。对于通过病史询问和体检能确诊者不一定均作有关检查。常用的辅助检查包括:①血、尿、粪常规检查。②血清学检查:如肥达、外斐反应、钩端螺旋体病的凝集溶解试验,乙脑的补体结合试验,系统性红斑狼疮的抗核抗体试验等。③血或骨髓培养:对伤寒、副伤寒、脓毒症、细菌性心内膜炎等疾病的病原诊断均具有决定性意义。④X线、CT与MRI检查:CT与MRI检查对诊断骨盆内、膈下与腹腔深部隐蔽性脓肿,尤其对发现腹膜后病灶如淋巴瘤、脓肿、血肿等有重要价值。⑤超声检查:对疑有急性渗出性心包炎和感染性心内膜炎患者,可行超声心动图检查。腹部超声波检查适用于疑有腹腔内占位性病变、肝脓肿、肝胆道结石以及肾脓肿、泌尿系结石等患者。⑥活体组织检查:如肝穿刺活组织检查、淋巴结以及皮损与皮下结节活体组织检查等。骨髓检查对白血病、恶性组织细胞病等具有决定性诊断价值。</p>
-<h3 id="病因诊断"><a href="#病因诊断" class="headerlink" title="病因诊断"></a>病因诊断</h3><p>发热是由于各种原因导致机体产热过多或散热减少,以及体温中枢功能障碍所致。其原因很多且复杂。在临床实践中,以发热为主诉或唯一症状就诊者有急性发热,尤其出疹性发热,原因不明发热,长期低热,超高热与反复发热。其病因特征亦各异。</p>
-<h4 id="急性发热"><a href="#急性发热" class="headerlink" title="急性发热"></a>急性发热</h4><p>热程在2周以内的发热称为急性发热。其原因很多,绝大多数属于感染,尤以呼吸道、泌尿道和消化道感染最常见,因为这些系统与外界相通,最易遭受病原体的侵袭。在排除上述系统感染后,则要注意某些急性传染病和其他系统的感染。</p>
-<h4 id="长期“不明原因”的中、高热"><a href="#长期“不明原因”的中、高热" class="headerlink" title="长期“不明原因”的中、高热"></a>长期“不明原因”的中、高热</h4><p>系指发热持续3周以上,体温多次超过38.3℃,经过至少1周深入细致的检查仍不能确诊的一组疾病,主要有感染、恶性肿瘤与结缔组织-血管性疾病三大类</p>
+<h4 id="淋巴结肿大"><a class="header-anchor" href="#淋巴结肿大">¶</a>淋巴结肿大</h4>
+<p>注意有无皮疹及出血点。皮肤多汗可见于结核病、风湿热、败血症、恶性淋巴瘤。皮肤发疹可见于猩红热、麻疹、风疹、斑疹伤寒、伤寒、水痘、恙虫病、传染性单核细胞增多症、丹毒、红斑狼疮、急性皮肌炎等,根据其特征性皮疹及出疹日期可对急性发疹性传染病作出诊断</p>
+<h4 id="脾大"><a class="header-anchor" href="#脾大">¶</a>脾大</h4>
+<p>注意有无皮疹及出血点。皮肤多汗可见于结核病、风湿热、败血症、恶性淋巴瘤。皮肤发疹可见于猩红热、麻疹、风疹、斑疹伤寒、伤寒、水痘、恙虫病、传染性单核细胞增多症、丹毒、红斑狼疮、急性皮肌炎等,根据其特征性皮疹及出疹日期可对急性发疹性传染病作出诊断。</p>
+<h4 id="胸部体征"><a class="header-anchor" href="#胸部体征">¶</a>胸部体征</h4>
+<p>如闻及肺部干湿性啰音或实变体征等,应考虑呼吸系统感染;发热伴有栓塞、心脏杂音,尤其是原有器质性心脏病者心脏杂音发生明显改变时,应注意感染性心内膜炎;发热伴心包摩擦音或心包积液体征,常提示心包炎。而急性心肌炎常表现为发热与心率不成比例,心率增快常超过发热程度。</p>
+<h4 id="肌肉与关节"><a class="header-anchor" href="#肌肉与关节">¶</a>肌肉与关节</h4>
+<p>发热伴肌肉疼痛见于许多传染病,一般无特殊性诊断意义,但如腓肠肌剧烈疼痛,甚至不能站立或行走,常提示钩端螺旋体病。局部肌痛兼有发热与白细胞增多,须检查有无深部脓肿,尤其是药物肌内注射引起的臀肌无菌性脓肿。发热伴多关节肿痛,病因常为各种关节炎,如化脓性、感染中毒性与变态反应性等,而淋病性与结核性关节炎常侵犯单个的大关节。</p>
+<h4 id="其他"><a class="header-anchor" href="#其他">¶</a>其他</h4>
+<p>长期不明原因的发热患者尤应注意隐蔽性病灶,如肝脏、膈下、脊椎、盆腔、鼻窦、乳突等局部脓肿。肝脓肿是引起长期发热的常见病因,在早期不一定有局部症状。脊椎病变如结核或脓毒症后脊椎旁化脓性病灶在体检时易被忽略。男性患者的睾丸与附睾检查、女性患者的盆腔检查,以及所有发热待查患者的直肠指检或乙状结肠镜检查均应列为常规。眼底检查也应作为常规,粟粒性结核可有眼脉络膜结核结节,年老患者肛门指检可发现前列腺脓肿。此外,腹部与盆腔手术(包括引产)后发热可由腹腔或盆腔内隐蔽的脓肿引起。</p>
+<h3 id="辅助检查"><a class="header-anchor" href="#辅助检查">¶</a>辅助检查</h3>
+<p>对发热患者行辅助检查时必须掌握检查目的明确,并以简便快捷为原则。对于通过病史询问和体检能确诊者不一定均作有关检查。常用的辅助检查包括:①血、尿、粪常规检查。②血清学检查:如肥达、外斐反应、钩端螺旋体病的凝集溶解试验,乙脑的补体结合试验,系统性红斑狼疮的抗核抗体试验等。③血或骨髓培养:对伤寒、副伤寒、脓毒症、细菌性心内膜炎等疾病的病原诊断均具有决定性意义。④X线、CT与MRI检查:CT与MRI检查对诊断骨盆内、膈下与腹腔深部隐蔽性脓肿,尤其对发现腹膜后病灶如淋巴瘤、脓肿、血肿等有重要价值。⑤超声检查:对疑有急性渗出性心包炎和感染性心内膜炎患者,可行超声心动图检查。腹部超声波检查适用于疑有腹腔内占位性病变、肝脓肿、肝胆道结石以及肾脓肿、泌尿系结石等患者。⑥活体组织检查:如肝穿刺活组织检查、淋巴结以及皮损与皮下结节活体组织检查等。骨髓检查对白血病、恶性组织细胞病等具有决定性诊断价值。</p>
+<h3 id="病因诊断"><a class="header-anchor" href="#病因诊断">¶</a>病因诊断</h3>
+<p>发热是由于各种原因导致机体产热过多或散热减少,以及体温中枢功能障碍所致。其原因很多且复杂。在临床实践中,以发热为主诉或唯一症状就诊者有急性发热,尤其出疹性发热,原因不明发热,长期低热,超高热与反复发热。其病因特征亦各异。</p>
+<h4 id="急性发热"><a class="header-anchor" href="#急性发热">¶</a>急性发热</h4>
+<p>热程在2周以内的发热称为急性发热。其原因很多,绝大多数属于感染,尤以呼吸道、泌尿道和消化道感染最常见,因为这些系统与外界相通,最易遭受病原体的侵袭。在排除上述系统感染后,则要注意某些急性传染病和其他系统的感染。</p>
+<h4 id="长期“不明原因”的中、高热"><a class="header-anchor" href="#长期“不明原因”的中、高热">¶</a>长期“不明原因”的中、高热</h4>
+<p>系指发热持续3周以上,体温多次超过38.3℃,经过至少1周深入细致的检查仍不能确诊的一组疾病,主要有感染、恶性肿瘤与结缔组织-血管性疾病三大类</p>
<ol>
<li>感染:引起发热待查的感染性疾病中主要由细菌感染所致,而任何一种致病菌或条件致病菌,或L-型细菌性感染均可分为全身性与局部性感染。全身性感染以伤寒与副伤寒、粟粒型结核与播散性结核(包括腹膜、肠、肠系膜淋巴结、肝、肾、胸膜和肺与肺门淋巴结结核)、脓毒症与感染性心内膜炎、布鲁菌病、黑热病、急性血吸虫病、旋毛虫病等;局部性感染以肝脓肿、胆道与泌尿生殖道感染、腹腔内脓肿(包括肝下、膈下、结肠旁、阑尾周围、腹膜后、盆腔脓肿等)为常见。局部性感染易被临床忽略。</li>
<li>恶性肿瘤:也是长期发热的常见原因。最常见的为原发性肝癌、淋巴瘤、恶性组织细胞病与白血病,其次为实质性恶性肿瘤如肺癌、肾癌、甲状腺癌等。</li>
<li>结缔组织,血管性疾病:也是较常见原因之一,大多伴有关节痛、皮肤、心、肾等多系统病变引起的相应症状与体征,但少数病例在典型症状出现前数周或数月可出现发热。此类疾病以系统性红斑狼疮、成人少年型类风湿关节炎、多动脉炎、皮肌炎、混合性结缔组织病、风湿热等常见。</li>
<li>其他:肉芽肿性疾病(肉芽肿性肝炎、结节病、局限性回肠炎等)、药物热、伪装热、体腔积血如血胸、血腹、肺梗死等。</li>
</ol>
-<h4 id="长期低热"><a href="#长期低热" class="headerlink" title="长期低热"></a>长期低热</h4><p>口腔温度在37.5℃至38.4℃,持续4周以上者。在诊断为长期低热时,必须先了解其正常体温,排除生理或功能性因素,并排除高温环境等影响,如在高温车间的纺织女工中,有长期低热者可达10%以上。长期低热由感染性疾病引起者占40%,非感染性疾病占57%,原因不明占3%。长期低热的原因可分为器质性与功能性两大类。</p>
+<h4 id="长期低热"><a class="header-anchor" href="#长期低热">¶</a>长期低热</h4>
+<p>口腔温度在37.5℃至38.4℃,持续4周以上者。在诊断为长期低热时,必须先了解其正常体温,排除生理或功能性因素,并排除高温环境等影响,如在高温车间的纺织女工中,有长期低热者可达10%以上。长期低热由感染性疾病引起者占40%,非感染性疾病占57%,原因不明占3%。长期低热的原因可分为器质性与功能性两大类。</p>
+<ol>
+<li>器质性低热:
<ol>
-<li>器质性低热:<ol>
<li>慢性感染:如结核病、肝脏疾病、慢性肾盂肾炎、慢性胆道感染以及各种病灶感染(鼻窦炎、牙根脓肿、前列腺炎、慢性盆腔炎、肛门周围脓肿等)。</li>
<li>结缔组织疾病:如风湿热、类风湿关节炎、系统性红斑狼疮等。</li>
<li>内分泌疾病:如甲亢、嗜铬细胞瘤等。</li>
<li>恶性肿瘤:早期淋巴瘤、实质性癌肿转移等。</li>
</ol>
</li>
-<li>功能性低热<ol>
+<li>功能性低热
+<ol>
<li>生理性低热:月经前期低热、妊娠期低热等。</li>
-<li>神经功能性低热:多见于青年女性,长期低热可长达数月或数年。有些患者低热有季节性,出现于夏季(谓之夏季低热),且每年如此。体温在一昼夜内波动幅度较小,常不超过0.5℃,且口腔、腋窝与直肠温度差不大,甚至可出现腋温大于口温,口温大于肛温或腋温大于肛温的反常现象,两侧腋温可相差1℃以上。体温昼夜规律失常。患者常伴有脸色潮红、皮肤划痕症、心动过速等自主神经功能紊乱或神经症色彩。但患者一般情况好,体重无变化,虽经各种药物治疗无效,但不经治疗也可自行消退。神经功能性低热较常见,约占长期低热的1&#x2F;3,预后良好。</li>
+<li>神经功能性低热:多见于青年女性,长期低热可长达数月或数年。有些患者低热有季节性,出现于夏季(谓之夏季低热),且每年如此。体温在一昼夜内波动幅度较小,常不超过0.5℃,且口腔、腋窝与直肠温度差不大,甚至可出现腋温大于口温,口温大于肛温或腋温大于肛温的反常现象,两侧腋温可相差1℃以上。体温昼夜规律失常。患者常伴有脸色潮红、皮肤划痕症、心动过速等自主神经功能紊乱或神经症色彩。但患者一般情况好,体重无变化,虽经各种药物治疗无效,但不经治疗也可自行消退。神经功能性低热较常见,约占长期低热的1/3,预后良好。</li>
<li>感染后低热:急性病毒或细菌感染得到控制后,高热消退,但可出现持续较久的低热,并伴有乏力,纳差等现象。此种发热可能与体温调节中枢功能失常或自主神经功能紊乱有关。</li>
</ol>
</li>
</ol>
-<h4 id="超高热危象的识别与诊断"><a href="#超高热危象的识别与诊断" class="headerlink" title="超高热危象的识别与诊断"></a>超高热危象的识别与诊断</h4><p>超高热系指发热超过41℃以上,主要见于体温调节中枢功能障碍,超高热(体温>41℃)是超高热危象的必有表现。</p>
+<h4 id="超高热危象的识别与诊断"><a class="header-anchor" href="#超高热危象的识别与诊断">¶</a>超高热危象的识别与诊断</h4>
+<p>超高热系指发热超过41℃以上,主要见于体温调节中枢功能障碍,超高热(体温>41℃)是超高热危象的必有表现。</p>
<p>有以下各种原因:</p>
<ol>
<li>中暑或日射病</li>
@@ -286,7 +316,8 @@
</ol>
<p>不论病因如何,超高热对细胞膜与细胞内结构有直接损害作用,当深部体温>41℃时细胞线粒体的氧化磷酸化出现障碍,可引起永久性脑损害;42~43℃持续数分钟细胞会陷入不可逆的损害,涉及全身各种细胞,尤以脑、心、肝、肾的变化最为突出,容易造成脑水肿颅内压升高,抽搐、昏迷,心、肝、肾、肺功能衰竭,DIC等多脏器功能衰竭。超高热危象的诊断要点是:</p>
<ol>
-<li><p>超高热时伴有多脏器功能受损害的表现:</p>
+<li>
+<p>超高热时伴有多脏器功能受损害的表现:</p>
<ol>
<li>心血管系统:低血压休克、心功能不全、心肌缺血与心律失常等。</li>
<li>中枢神经系统:体温越高对中枢神经系统损害越重,症状出现越早;包括不同程度的意识障碍如谵妄、嗜睡、昏迷、抽搐、大小便失禁、脑膜刺激征、瘫痪、病理反射阳性、脑疝、视神经乳头水肿等。</li>
@@ -297,27 +328,36 @@
<li>其他表现:如横纹肌溶解可致血肌酸磷酸激酶(CK)增高等。</li>
</ol>
</li>
-<li><p>原发病的表现:<br>如中毒性菌痢的腹泻、脓血便;乙脑时的抽搐、昏迷等。</p>
+<li>
+<p>原发病的表现:<br>
+如中毒性菌痢的腹泻、脓血便;乙脑时的抽搐、昏迷等。</p>
</li>
</ol>
-<h2 id="定义"><a href="#定义" class="headerlink" title="定义"></a>定义</h2><p>发热(fever)是指机体在致热原作用下或各种原因引起体温调节中枢的功能障碍时,体温升高超出正常范围。见于各种全身性和局部性感染以及许多非感染性疾病(如肿瘤与结缔组织病等),它是内科急诊中最常见的症状。一般而言,当腋下、口腔或直肠内温度分别超过37℃、37.3℃和37.6℃,并且24小时内温度差波动在1℃以上,可称为发热。按照发热的高低,可分为:</p>
+<h2 id="定义"><a class="header-anchor" href="#定义">¶</a>定义</h2>
+<p>发热(fever)是指机体在致热原作用下或各种原因引起体温调节中枢的功能障碍时,体温升高超出正常范围。见于各种全身性和局部性感染以及许多非感染性疾病(如肿瘤与结缔组织病等),它是内科急诊中最常见的症状。一般而言,当腋下、口腔或直肠内温度分别超过37℃、37.3℃和37.6℃,并且24小时内温度差波动在1℃以上,可称为发热。按照发热的高低,可分为:</p>
<ol>
<li>低热:37.4~38℃</li>
<li>中度发热:38.1~39℃</li>
<li>高热:39.1~41℃</li>
<li>超高热;41℃以上。</li>
</ol>
-<h2 id="后果"><a href="#后果" class="headerlink" title="后果"></a>后果</h2><p>超高热或过高热危象(extreme pyrexic crisis,EPC)是指过高热若不及时处理,使脑、心、肾等重要器官受到严重损害,出现抽搐、昏迷、休克、出血、心脏、呼吸和肾衰竭等危及生命的状态。若抢救不力,常于数小时内死亡。</p>
-<h2 id="人体散热方式"><a href="#人体散热方式" class="headerlink" title="人体散热方式"></a>人体散热方式</h2><p>人体散热主要有辐射、蒸发、对流及传导物理过程,当周围温度低于皮肤温度时,热即从皮肤辐射散热;其次是体内热量传导至皮肤周围空气层,经对流散热。当周围温度超过体温时,主要依靠汗液蒸发,体热从皮肤、呼吸道和大小便3处消散,以皮肤散热最为重要。当室温在23~25℃时,体热通过皮肤辐射、对流、传导散热占70%;当室温高达31~32℃时,出汗蒸发即成为散热主要方式。皮肤血管内血流量越大,散热速度越快;</p>
+<h2 id="后果"><a class="header-anchor" href="#后果">¶</a>后果</h2>
+<p>超高热或过高热危象(extreme pyrexic crisis,EPC)是指过高热若不及时处理,使脑、心、肾等重要器官受到严重损害,出现抽搐、昏迷、休克、出血、心脏、呼吸和肾衰竭等危及生命的状态。若抢救不力,常于数小时内死亡。</p>
+<h2 id="人体散热方式"><a class="header-anchor" href="#人体散热方式">¶</a>人体散热方式</h2>
+<p>人体散热主要有辐射、蒸发、对流及传导物理过程,当周围温度低于皮肤温度时,热即从皮肤辐射散热;其次是体内热量传导至皮肤周围空气层,经对流散热。当周围温度超过体温时,主要依靠汗液蒸发,体热从皮肤、呼吸道和大小便3处消散,以皮肤散热最为重要。当室温在23~25℃时,体热通过皮肤辐射、对流、传导散热占70%;当室温高达31~32℃时,出汗蒸发即成为散热主要方式。皮肤血管内血流量越大,散热速度越快;</p>
<p><strong>体表温度越高,则散热也越迅速。</strong></p>
-<h2 id="致热原"><a href="#致热原" class="headerlink" title="致热原"></a>致热原</h2><p>致热原是一类能引起恒温动物体温异常升高的物质的总称。可分为外源性和内源性两类</p>
+<h2 id="致热原"><a class="header-anchor" href="#致热原">¶</a>致热原</h2>
+<p>致热原是一类能引起恒温动物体温异常升高的物质的总称。可分为外源性和内源性两类</p>
<ol>
-<li><p>外源性致热原: 各种病原体如细菌、病毒、立克次体、衣原体、螺旋体、原虫和寄生虫等的毒素及其代谢产物,尤以内毒素(多属脂多糖类物质)最为重要,其次是原胆烷醇酮、多核苷酸、抗原-抗体复合物等。</p>
+<li>
+<p>外源性致热原: 各种病原体如细菌、病毒、立克次体、衣原体、螺旋体、原虫和寄生虫等的毒素及其代谢产物,尤以内毒素(多属脂多糖类物质)最为重要,其次是原胆烷醇酮、多核苷酸、抗原-抗体复合物等。</p>
</li>
-<li><p>内源性致热原: 外源性致热原一般不能直接作用于体温调节中枢引起发热,但能刺激和激活主要存在于白细胞、单核细胞和组织吞噬细胞内的内源性致热原前体,于短期内合成新的mRNA和致热原,这些具有活性的内源性致热原可能是通过某些生物活性物质如前列腺素、单胺、cAMP、钙钠比值、内啡肽等作为中介,提高体温调节中枢调定点而引起发热。</p>
+<li>
+<p>内源性致热原: 外源性致热原一般不能直接作用于体温调节中枢引起发热,但能刺激和激活主要存在于白细胞、单核细胞和组织吞噬细胞内的内源性致热原前体,于短期内合成新的mRNA和致热原,这些具有活性的内源性致热原可能是通过某些生物活性物质如前列腺素、单胺、cAMP、钙钠比值、内啡肽等作为中介,提高体温调节中枢调定点而引起发热。</p>
</li>
</ol>
-<h3 id="发生机制"><a href="#发生机制" class="headerlink" title="发生机制"></a>发生机制</h3><p>因产热、散热异常所致。因产热过多引起的发热不多,主要见于剧烈运动后、癫痫持续状态和甲亢危象时,一般持续不久。广泛性皮肤病、阿托品中毒时出汗功能障碍,散热减少引起发热,主要见于炎热季节。大量失水、失血常伴有发热,尤其多见于小儿,出现所谓“失水热”,是由于血容量减少、散热减少。心脏病患者也可有发热,主要由于肺部充血和肺部感染或有风湿活动或血栓形成外,在心衰阶段的发热,则与皮肤水肿引起散热减少有关。中枢神经性高温以中暑最为典型,也可由脑出血、脑炎等引起。由于中枢神经系统遭受严重伤害,下丘脑丧失调温能力而衰竭,每有骤升的超高温,达41℃或以上,同时交感神经受抑制,以皮肤干燥无汗为特征。</p>
+<h3 id="发生机制"><a class="header-anchor" href="#发生机制">¶</a>发生机制</h3>
+<p>因产热、散热异常所致。因产热过多引起的发热不多,主要见于剧烈运动后、癫痫持续状态和甲亢危象时,一般持续不久。广泛性皮肤病、阿托品中毒时出汗功能障碍,散热减少引起发热,主要见于炎热季节。大量失水、失血常伴有发热,尤其多见于小儿,出现所谓“失水热”,是由于血容量减少、散热减少。心脏病患者也可有发热,主要由于肺部充血和肺部感染或有风湿活动或血栓形成外,在心衰阶段的发热,则与皮肤水肿引起散热减少有关。中枢神经性高温以中暑最为典型,也可由脑出血、脑炎等引起。由于中枢神经系统遭受严重伤害,下丘脑丧失调温能力而衰竭,每有骤升的超高温,达41℃或以上,同时交感神经受抑制,以皮肤干燥无汗为特征。</p>
</div>
diff --git a/2023/06/22/灯笼草/index.html b/2023/06/22/灯笼草/index.html
index 9beb7c1f..18b5de9f 100644
--- a/2023/06/22/灯笼草/index.html
+++ b/2023/06/22/灯笼草/index.html
@@ -199,43 +199,58 @@
</div>
<div class="post-content">
<p>今天在菜园子里看到了野生的灯笼草,都结果了:</p>
-<p><img src="/img/%E7%94%9F%E6%B4%BB/%E7%81%AF%E7%AC%BC%E8%8D%89.jpg"></p>
-<p>灯笼果别名为小果酸浆、秘鲁苦蘵、打头泡、灯笼草等,茄科酸浆属多年生草本植物。<br>灯笼果茎直立,叶较厚,阔卵形或心脏形,两面密生柔毛;花单独腋生,花萼阔钟状,花冠阔钟状,黄色而喉部有紫色斑纹,花丝及花药蓝紫色,花药长约3毫米。果萼薄纸质,淡绿色或淡黄色,浆果成熟时黄色,种子黄色,圆盘状,夏季开花结果。生于田间、路旁、村边。我国南北各地均有分市。</p>
+<p><img src="/img/%E7%94%9F%E6%B4%BB/%E7%81%AF%E7%AC%BC%E8%8D%89.jpg" alt=""></p>
+<p>灯笼果别名为小果酸浆、秘鲁苦蘵、打头泡、灯笼草等,茄科酸浆属多年生草本植物。<br>
+灯笼果茎直立,叶较厚,阔卵形或心脏形,两面密生柔毛;花单独腋生,花萼阔钟状,花冠阔钟状,黄色而喉部有紫色斑纹,花丝及花药蓝紫色,花药长约3毫米。果萼薄纸质,淡绿色或淡黄色,浆果成熟时黄色,种子黄色,圆盘状,夏季开花结果。生于田间、路旁、村边。我国南北各地均有分市。</p>
<p><strong>不要与<a target="_blank" rel="noopener" href="https://en.wikipedia.org/wiki/Gooseberry">醋栗</a>混淆</strong></p>
<p>醋栗长这样:</p>
-<p><img src="/img/%E7%94%9F%E6%B4%BB/%E9%86%8B%E6%A0%97.jpg"></p>
+<p><img src="/img/%E7%94%9F%E6%B4%BB/%E9%86%8B%E6%A0%97.jpg" alt=""></p>
<hr>
-<h2 id="性味"><a href="#性味" class="headerlink" title="性味"></a>性味</h2><ul>
-<li><p>《陆川本草》:”甘淡,微寒。”</p>
+<h2 id="性味"><a class="header-anchor" href="#性味">¶</a>性味</h2>
+<ul>
+<li>
+<p>《陆川本草》:“甘淡,微寒。”</p>
</li>
-<li><p>《南宁市药物志》:”苦,寒,微甘。”</p>
+<li>
+<p>《南宁市药物志》:“苦,寒,微甘。”</p>
</li>
</ul>
-<h2 id="功能主治"><a href="#功能主治" class="headerlink" title="功能主治"></a>功能主治</h2><blockquote>
+<h2 id="功能主治"><a class="header-anchor" href="#功能主治">¶</a>功能主治</h2>
+<blockquote>
<p>清热,行气,止痛,消肿。治感冒,痄腮,喉痛,咳嗽,腹胀,疝气,天疱疮。</p>
</blockquote>
<ul>
-<li><p>《陆川本草》:”行气,消胀,利尿。治腹胀,睾丸炎,疝气。”</p>
+<li>
+<p>《陆川本草》:“行气,消胀,利尿。治腹胀,睾丸炎,疝气。”</p>
</li>
-<li><p>《南宁市药物志》:”清热杀虫,止痛消肿。治热眼,喉痛,咳嗽;外敷毒疮,并熏洗阴囊肿大。”</p>
+<li>
+<p>《南宁市药物志》:“清热杀虫,止痛消肿。治热眼,喉痛,咳嗽;外敷毒疮,并熏洗阴囊肿大。”</p>
</li>
-<li><p>《生草药手册》:”内服治伤寒或小肠疝气。外洗治天疱疮。”</p>
+<li>
+<p>《生草药手册》:“内服治伤寒或小肠疝气。外洗治天疱疮。”</p>
</li>
-<li><p>《中国药植图鉴》:”功同酸浆。”</p>
+<li>
+<p>《中国药植图鉴》:“功同酸浆。”</p>
</li>
-<li><p>广州空军《常用中草药手册》:”治感冒发热,腮腺炎,支气管炎,疱疹,疖疮,疝气痛。”</p>
+<li>
+<p>广州空军《常用中草药手册》:“治感冒发热,腮腺炎,支气管炎,疱疹,疖疮,疝气痛。”</p>
</li>
</ul>
-<h2 id="用法用量"><a href="#用法用量" class="headerlink" title="用法用量"></a>用法用量</h2><ul>
+<h2 id="用法用量"><a class="header-anchor" href="#用法用量">¶</a>用法用量</h2>
+<ul>
<li>内服:煎汤,3 ~ 5钱。</li>
<li>外用:捣敷或煎水洗。</li>
</ul>
-<h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul>
-<li><p>《本草纲目》旧版草部第十六卷,草之五:燕京野果名红姑娘,外垂降囊,中含赤子如珠,酸甘可食盈盈绕砌,与翠草同芳,亦自可爱。捣计服治黄病(即黄胆性肝炎)多效,治上气咳嗽风热,明目,付小儿内辟等多种疾病。东北地区种植较广泛,其他地区种植较少,仍属稀特蔬菜。</p>
+<h2 id="引用"><a class="header-anchor" href="#引用">¶</a>引用</h2>
+<ul>
+<li>
+<p>《本草纲目》旧版草部第十六卷,草之五:燕京野果名红姑娘,外垂降囊,中含赤子如珠,酸甘可食盈盈绕砌,与翠草同芳,亦自可爱。捣计服治黄病(即黄胆性肝炎)多效,治上气咳嗽风热,明目,付小儿内辟等多种疾病。东北地区种植较广泛,其他地区种植较少,仍属稀特蔬菜。</p>
</li>
-<li><p>《别录》:“酸浆,生荆、楚川泽及人家田园中。五月采,阴干。”陶弘景:“酸浆,处处人家多有。叶亦可食。子作房,房中有子,如梅李大,皆黄赤色。”《唐本草》:“灯笼草,所在有之。八月采。枝干高三、四尺,有花,红色,状若灯笼,内有子,红色可爱。根、茎、花、叶并入药用。”</p>
+<li>
+<p>《别录》:“酸浆,生荆、楚川泽及人家田园中。五月采,阴干。”陶弘景:“酸浆,处处人家多有。叶亦可食。子作房,房中有子,如梅李大,皆黄赤色。”《唐本草》:“灯笼草,所在有之。八月采。枝干高三、四尺,有花,红色,状若灯笼,内有子,红色可爱。根、茎、花、叶并入药用。”</p>
</li>
-<li><p>《梦溪笔谈》:“苦耽,即本草酸浆也。河西番界中酸浆有盈丈者。”《本草衍义》:“酸浆,今天下皆有之。苗如天茄子,开小白花,结青壳,熟则深红,壳中子大如樱,亦红色,樱中复有细子,如落苏之子,食之有青草气。此即苦耽也。”</p>
+<li>
+<p>《梦溪笔谈》:“苦耽,即本草酸浆也。河西番界中酸浆有盈丈者。”《本草衍义》:“酸浆,今天下皆有之。苗如天茄子,开小白花,结青壳,熟则深红,壳中子大如樱,亦红色,樱中复有细子,如落苏之子,食之有青草气。此即苦耽也。”</p>
</li>
</ul>
diff --git a/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html b/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html
index dfa25769..e0b982f0 100644
--- a/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html
+++ b/2023/06/28/caml-release-runtime-system导致的死锁问题/index.html
@@ -194,19 +194,17 @@
<div class="post-content">
<p>给出一个<code>test.ml</code>:</p>
<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">Printf</span>.eprintf <span class="string">&quot;hello from OCaml\n%!&quot;</span></span><br></pre></td></tr></table></figure>
-
<p>和<code>test-ocaml-5.c</code>:</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;caml/misc.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;caml/callback.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;caml/threads.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span></span><br><span class="line"><span class="title function_">main</span> <span class="params">(<span class="type">int</span> argc, <span class="type">char</span> *argv[])</span></span><br><span class="line"> &#123;</span><br><span class="line"> <span class="built_in">fprintf</span> (<span class="built_in">stderr</span>, <span class="string">&quot;starting up ...\n&quot;</span>);</span><br><span class="line"> caml_startup (argv);</span><br><span class="line"> <span class="built_in">fprintf</span> (<span class="built_in">stderr</span>, <span class="string">&quot;acquiring ...\n&quot;</span>);</span><br><span class="line"> caml_acquire_runtime_system ();</span><br><span class="line"> <span class="built_in">fprintf</span> (<span class="built_in">stderr</span>, <span class="string">&quot;acquired\n&quot;</span>);</span><br><span class="line"> <span class="comment">// here is where I would be calling an OCaml callback</span></span><br><span class="line"> <span class="comment">// omitted for simplicity</span></span><br><span class="line"> caml_release_runtime_system ();</span><br><span class="line"> <span class="built_in">exit</span> (<span class="number">0</span>);</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure>
-
-<p>然后用OCaml5的ocaml native compiler编译一下(这里我用的是<code>ocaml-variants.5.0.0+options</code>):<br><code>ocamlopt -g test-ocaml-5.c test.ml -o test-ocaml-5</code></p>
+<p>然后用OCaml5的ocaml native compiler编译一下(这里我用的是<code>ocaml-variants.5.0.0+options</code>):<br>
+<code>ocamlopt -g test-ocaml-5.c test.ml -o test-ocaml-5</code></p>
<p>运行<code>test-ocaml-5</code> 会出现:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">starting up ...</span><br><span class="line">hello from OCaml</span><br><span class="line">acquiring ...</span><br><span class="line">Fatal error: Fatal error during lock: Resource deadlock avoided</span><br><span class="line"></span><br><span class="line">[1] 8998 IOT instruction (core dumped) ./test-ocaml-5</span><br></pre></td></tr></table></figure>
-
-<p>这里我尝试了一下 4.14.0 和 4.14.1 , 都没有出现这个情况,而如果用<code>threads</code>编译的话:<br><code>ocamlopt -g -I +unix unix.cmxa -I +threads threads.cmxa test-ocaml-5.c test.ml -o test-ocaml-5</code></p>
+<p>这里我尝试了一下 4.14.0 和 4.14.1 , 都没有出现这个情况,而如果用<code>threads</code>编译的话:<br>
+<code>ocamlopt -g -I +unix unix.cmxa -I +threads threads.cmxa test-ocaml-5.c test.ml -o test-ocaml-5</code></p>
<p>无论在5.0还是4.14.x,都会挂起。</p>
<p>出现这个问题的一个可能原因是,在<code>test-ocaml-5.c</code>中,我在开头调用了<code>caml_startup()</code>,这会让当前线程获取锁,而<code>caml_acquire_runtime_system()</code>会再次获取它,<code>caml_acquire_runtime_system()</code> 应该在<code>caml_release_runtime_system()</code>之后调用:</p>
<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">int</span></span><br><span class="line">main (<span class="built_in">int</span> argc, <span class="built_in">char</span> *argv<span class="literal">[]</span>)</span><br><span class="line"> &#123;</span><br><span class="line"> fprintf (stderr, <span class="string">&quot;starting up ...\n&quot;</span>);</span><br><span class="line"> caml_startup (argv);</span><br><span class="line"> fprintf (stderr, <span class="string">&quot;acquiring ...\n&quot;</span>);</span><br><span class="line"> caml_release_runtime_system <span class="literal">()</span>;</span><br><span class="line"> caml_acquire_runtime_system <span class="literal">()</span>;</span><br><span class="line"> fprintf (stderr, <span class="string">&quot;acquired\n&quot;</span>);</span><br><span class="line"> exit (<span class="number">0</span>);</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure>
-
<p>运行结果为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">starting up ...</span><br><span class="line">hello from OCaml</span><br><span class="line">acquiring ...</span><br><span class="line">acquired</span><br></pre></td></tr></table></figure>
</div>
diff --git a/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html b/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html
index 3b3b7db7..aba8a0d1 100644
--- a/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html
+++ b/2023/06/28/隐藏一些OCaml-Effect的机制,让其语法在精神上更接近delimcc/index.html
@@ -192,9 +192,8 @@
</div>
</div>
<div class="post-content">
- <p><a target="_blank" rel="noopener" href="https://github.com/kayceesrk/delimcc_of_fxhandler">delimcc_of_fxhandler这个库</a>在OCaml5的effect handlers上实现了一些delimcc原语(shift&#x2F;reset, control&#x2F;prompt这些):</p>
+ <p><a target="_blank" rel="noopener" href="https://github.com/kayceesrk/delimcc_of_fxhandler">delimcc_of_fxhandler这个库</a>在OCaml5的effect handlers上实现了一些delimcc原语(shift/reset, control/prompt这些):</p>
<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> p = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"><span class="keyword">assert</span> (<span class="literal">[]</span> = push_prompt p (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> <span class="number">1</span>::<span class="number">2</span>::take_subcont p (<span class="keyword">fun</span> _k -&gt; <span class="literal">[]</span>)));</span><br><span class="line"><span class="keyword">assert</span> ([<span class="number">1</span>;<span class="number">2</span>] = push_prompt p (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> <span class="number">1</span>::<span class="number">2</span>::take_subcont p (<span class="keyword">fun</span> k -&gt; push_subcont k <span class="literal">[]</span>)));</span><br><span class="line"><span class="keyword">assert</span> (<span class="number">135</span> =</span><br><span class="line"> <span class="keyword">let</span> p1 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> p2 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> p3 = new_prompt <span class="literal">()</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> pushtwice sk =</span><br><span class="line"> sk (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> sk (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> shift0 p2 (<span class="keyword">fun</span> sk2 -&gt; sk2 (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> sk2 (<span class="keyword">fun</span> <span class="literal">()</span> -&gt; <span class="number">3</span>))) <span class="literal">()</span>))</span><br><span class="line"> <span class="keyword">in</span></span><br><span class="line"> push_prompt p1 (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> push_prompt p2 (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> push_prompt p3 (<span class="keyword">fun</span> <span class="literal">()</span> -&gt; shift0 p1 pushtwice <span class="literal">()</span>) + <span class="number">10</span>) + <span class="number">1</span>) + <span class="number">100</span>);</span><br><span class="line"></span><br><span class="line">print_endline <span class="string">&quot;Success!&quot;</span></span><br></pre></td></tr></table></figure>
-
<p>另外, <a target="_blank" rel="noopener" href="https://github.com/avsm/ocaml/commits/effect-syntax">avsm这里</a>可以看到一些OCaml的Effect Syntax进展。</p>
<p>还有 <a target="_blank" rel="noopener" href="https://github.com/dhil/ocaml-multicont">multi-shot continuations in OCaml</a>,在这个仓库里面还讨论了一些有趣的问题,例如,OCaml 编译器和runtime会做出一些假设从而进行一些优化,这些优化在使用multi-shot continutation时是不可取的(或完全错误的)。编译器优化导致错误的一个例子是堆到栈的转换,例如:</p>
<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">(* An illustration of how the heap to stack optimisation is broken.</span></span><br><span class="line"><span class="comment"> * This example is adapted from de Vilhena and Pottier (2021).</span></span><br><span class="line"><span class="comment"> * file: heap2stack.ml</span></span><br><span class="line"><span class="comment"> * compile: ocamlopt -I $(opam var lib)/multicont multicont.cmxa heap2stack.ml</span></span><br><span class="line"><span class="comment"> * run: ./a.out *)</span></span><br><span class="line"></span><br><span class="line"><span class="comment">(* We first require a little bit of setup. The following declares an</span></span><br><span class="line"><span class="comment"> operation `Twice&#x27; which we use to implement multiple returns. *)</span></span><br><span class="line"><span class="keyword">type</span> _ <span class="type">Effect</span>.t += <span class="type">Twice</span> : <span class="built_in">unit</span> <span class="type">Effect</span>.t</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The handler `htwice&#x27; interprets `Twice&#x27; by simply invoking its</span></span><br><span class="line"><span class="comment"> continuation twice. *)</span></span><br><span class="line"><span class="keyword">let</span> htwice : (<span class="built_in">unit</span>, <span class="built_in">unit</span>) <span class="type">Effect</span>.<span class="type">Deep</span>.handler</span><br><span class="line"> = &#123; retc = (<span class="keyword">fun</span> x -&gt; x)</span><br><span class="line"> ; exnc = (<span class="keyword">fun</span> e -&gt; raise e)</span><br><span class="line"> ; effc = (<span class="keyword">fun</span> (<span class="keyword">type</span> a) (eff : a <span class="type">Effect</span>.t) -&gt;</span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">open</span> <span class="type">Effect</span>.<span class="type">Deep</span> <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">match</span> eff <span class="keyword">with</span></span><br><span class="line"> | <span class="type">Twice</span> -&gt; <span class="type">Some</span> (<span class="keyword">fun</span> (k : (a, _) continuation) -&gt;</span><br><span class="line"> continue (<span class="type">Multicont</span>.<span class="type">Deep</span>.clone_continuation k) <span class="literal">()</span>;</span><br><span class="line"> continue k <span class="literal">()</span>)</span><br><span class="line"> | _ -&gt; <span class="type">None</span>) &#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">(* Now for the interesting stuff. In the code below, the compiler will</span></span><br><span class="line"><span class="comment"> perform an escape analysis on the reference `i&#x27; and deduce that it</span></span><br><span class="line"><span class="comment"> does not escape the local scope, because it is unaware of the</span></span><br><span class="line"><span class="comment"> semantics of `perform Twice&#x27;, hence the optimiser will transform</span></span><br><span class="line"><span class="comment"> `i&#x27; into an immediate on the stack to save a heap allocation. As a</span></span><br><span class="line"><span class="comment"> consequence, the assertion `(!i = 1)&#x27; will succeed twice, whereas</span></span><br><span class="line"><span class="comment"> it should fail after the second return of `perform Twice&#x27;. *)</span></span><br><span class="line"><span class="keyword">let</span> heap2stack <span class="literal">()</span> =</span><br><span class="line"> <span class="type">Effect</span>.<span class="type">Deep</span>.match_with</span><br><span class="line"> (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> <span class="keyword">let</span> i = <span class="built_in">ref</span> <span class="number">0</span> <span class="keyword">in</span></span><br><span class="line"> <span class="type">Effect</span>.perform <span class="type">Twice</span>;</span><br><span class="line"> i := !i + <span class="number">1</span>;</span><br><span class="line"> <span class="type">Printf</span>.printf <span class="string">&quot;i = %d\n%!&quot;</span> !i;</span><br><span class="line"> <span class="keyword">assert</span> (!i = <span class="number">1</span>))</span><br><span class="line"> <span class="literal">()</span> htwice</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The following does not trigger an assertion failure. *)</span></span><br><span class="line"><span class="keyword">let</span> _ = heap2stack <span class="literal">()</span></span><br><span class="line"></span><br><span class="line"><span class="comment">(* To fix this issue, we can wrap reference allocations in an instance</span></span><br><span class="line"><span class="comment"> of `Sys.opaque_identity&#x27;. However, this is not really a viable fix</span></span><br><span class="line"><span class="comment"> in general, as we may not have access to the client code that</span></span><br><span class="line"><span class="comment"> allocates the reference! *)</span></span><br><span class="line"><span class="keyword">let</span> heap2stack&#x27; <span class="literal">()</span> =</span><br><span class="line"> <span class="type">Effect</span>.<span class="type">Deep</span>.match_with</span><br><span class="line"> (<span class="keyword">fun</span> <span class="literal">()</span> -&gt;</span><br><span class="line"> <span class="keyword">let</span> i = <span class="type">Sys</span>.opaque_identity (<span class="built_in">ref</span> <span class="number">0</span>) <span class="keyword">in</span></span><br><span class="line"> <span class="type">Effect</span>.perform <span class="type">Twice</span>;</span><br><span class="line"> i := !i + <span class="number">1</span>;</span><br><span class="line"> <span class="type">Printf</span>.printf <span class="string">&quot;i = %d\n%!&quot;</span> !i;</span><br><span class="line"> <span class="keyword">assert</span> (!i = <span class="number">1</span>))</span><br><span class="line"> <span class="literal">()</span> htwice</span><br><span class="line"></span><br><span class="line"><span class="comment">(* The following triggers an assertion failure. *)</span></span><br><span class="line"><span class="keyword">let</span> _ = heap2stack&#x27; <span class="literal">()</span></span><br></pre></td></tr></table></figure>
diff --git a/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html b/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html
index b8845ce2..4dfc28ce 100644
--- a/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html
+++ b/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/index.html
@@ -192,30 +192,35 @@
</div>
</div>
<div class="post-content">
- <p>We present WiscKey, a persistent LSM-tree-based key-value store with a performance-oriented data layoutthat separates keys from values to minimize I&#x2F;O amplifi-cation. The design of WiscKey is highly SSD optimized, leveraging both the sequential and random performance characteristics of the device.</p>
+ <p>We present WiscKey, a persistent LSM-tree-based key-value store with a performance-oriented data layoutthat separates keys from values to minimize I/O amplifi-cation. The design of WiscKey is highly SSD optimized, leveraging both the sequential and random performance characteristics of the device.</p>
<ul>
<li><a href="/papers/WiscKey:%20Separating%20Keys%20from%20Values%20in%20SSD-conscious%20Storage.pdf">原始论文</a></li>
</ul>
-<p>WiscKey是一种基于LSM-Tree的kv存储,它的实现很简单: 将键和值分开存储, 这么做可以显著的减少I&#x2F;O放大。</p>
+<p>WiscKey是一种基于LSM-Tree的kv存储,它的实现很简单: 将键和值分开存储, 这么做可以显著的减少I/O放大。</p>
<p>WiscKey的设计是针对SSD优化的,充分利用了SSD的性能并提出了一种轻量的GC方案, 除此之外还分析了现代存储硬件的特性和LSM树的读写放大的问题。</p>
<p>总的来说,WiscKey是基于SSD硬件特性而重新设计的存储结构。虽然LevelDB也是一种键值存储引擎,但它并没有像WiscKey那样专门为SSD硬件而设计。因此,如果将LevelDB的存储结构按照SSD硬件的特性进行优化,可能会提高一些性能,但是不一定能够达到WiscKey的性能水平。</p>
-<h2 id="笔记"><a href="#笔记" class="headerlink" title="笔记"></a>笔记</h2><ul>
-<li><p>The main data structures in LevelDB are an on-disk log file, two in-memory sorted skiplists (memtableand immutable memtable), and seven levels (L0 to L6) of on-disk Sorted String Table (SSTable) files</p>
+<h2 id="笔记"><a class="header-anchor" href="#笔记">¶</a>笔记</h2>
+<ul>
+<li>
+<p>The main data structures in LevelDB are an on-disk log file, two in-memory sorted skiplists (memtableand immutable memtable), and seven levels (L0 to L6) of on-disk Sorted String Table (SSTable) files</p>
<blockquote>
<p>LSM-trees的内部的各种组件可以使用任意索引结构来实现。通常内存组件会使用skiplist或B+树等并发数据结构,而磁盘组件会使用B+树或SSTables(SSTable包含一个数据块列表和一个索引块:数据块存储按键排序的键值对,索引块存储所有数据块的键范围)</p>
</blockquote>
</li>
-<li><p>how LSM-trees maintainsequential I&#x2F;O access by increasing I&#x2F;O amplification.</p>
+<li>
+<p>how LSM-trees maintainsequential I/O access by increasing I/O amplification.</p>
<blockquote>
-<p>具体来说,LSM-trees的写放大是指每次写入操作都需要将数据追加到写前日志中,并加入到内存组件C0中。当C0的大小达到一定阈值时,C0会与磁盘上的C1进行归并排序操作,生成新的组件new-C1,并将其顺序写入磁盘,取代旧版本的C1。类似地,当C1的大小达到一定阈值时,C1会与下一层组件Ci+1合并。这种归并排序的过程可以保证数据在磁盘上的存储是有序的,从而保持顺序I&#x2F;O访问</p>
+<p>具体来说,LSM-trees的写放大是指每次写入操作都需要将数据追加到写前日志中,并加入到内存组件C0中。当C0的大小达到一定阈值时,C0会与磁盘上的C1进行归并排序操作,生成新的组件new-C1,并将其顺序写入磁盘,取代旧版本的C1。类似地,当C1的大小达到一定阈值时,C1会与下一层组件Ci+1合并。这种归并排序的过程可以保证数据在磁盘上的存储是有序的,从而保持顺序I/O访问</p>
</blockquote>
</li>
-<li><p>First, WiscKey separates keys from values, keeping only keys in theLSM-tree and the values in a separate log file. Second,to deal with unsorted values (which necessitate random access during range queries), WiscKey uses the parallel random-read characteristic of SSD devices. Third, WiscKey utilizes unique crash-consistency and garbage-collection techniques to efficiently manage the value log.Finally, WiscKey optimizes performance by removingthe LSM-tree log without sacrificing consistency, thusreducing system-call overhead from small writes.</p>
+<li>
+<p>First, WiscKey separates keys from values, keeping only keys in theLSM-tree and the values in a separate log file. Second,to deal with unsorted values (which necessitate random access during range queries), WiscKey uses the parallel random-read characteristic of SSD devices. Third, WiscKey utilizes unique crash-consistency and garbage-collection techniques to efficiently manage the value log.Finally, WiscKey optimizes performance by removingthe LSM-tree log without sacrificing consistency, thusreducing system-call overhead from small writes.</p>
<blockquote>
<p>这是WiscKey的主要优化方式</p>
</blockquote>
</li>
-<li><p>For range queries, LevelDB provides the user with an iterator-based interface with Seek(key), Next(), Prev(),Key() and Value() operations. To scan a range of key-value pairs, users can first Seek() to the starting key, then call Next() or Prev() to search keys one by one. To retrieve the key or the value of the current iterator position, users call Key() or Value(), respectively.</p>
+<li>
+<p>For range queries, LevelDB provides the user with an iterator-based interface with Seek(key), Next(), Prev(),Key() and Value() operations. To scan a range of key-value pairs, users can first Seek() to the starting key, then call Next() or Prev() to search keys one by one. To retrieve the key or the value of the current iterator position, users call Key() or Value(), respectively.</p>
<blockquote>
<p>如果要查询某个key范围的数据,LevelDB会先找到该范围的起始key在哪个SSTable中,然后按照顺序读取该SSTable中的数据,直到读取到范围之外的key为止。</p>
<p>而读取SSTable中的数据是通过Binary Search来实现的。为了加速Search,LevelDB为每个SSTable建立了一个稀疏索引,用来记录每个数据块的最大key和最小key。</p>
diff --git a/2023/08/15/poll-error-attribute-in-OCaml/index.html b/2023/08/15/poll-error-attribute-in-OCaml/index.html
index a31bde90..d48bc2eb 100644
--- a/2023/08/15/poll-error-attribute-in-OCaml/index.html
+++ b/2023/08/15/poll-error-attribute-in-OCaml/index.html
@@ -197,7 +197,6 @@
<p>OCaml 编译器提供了一个名为 <a target="_blank" rel="noopener" href="https://github.com/ocaml/ocaml/pull/10462"><code>[@poll error]</code></a> 的annotation,可以在函数中使用它来确保该函数不包含safe point。</p>
<p>所以通过使用 <code>[@poll error]</code> 就可以创建在Domain内原子性执行的函数,也就是说,基于此特性可以实现单个Domain内线程安全的数据结构,例如 thread-table 便是使用这个特性实现的 Hash Table。可以看看它的 add 函数的实现:</p>
<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span>[@poll error] add_atomically t buckets n i before after =</span><br><span class="line"> t.rehash = <span class="number">0</span> &amp;&amp; buckets == t.buckets</span><br><span class="line"> &amp;&amp; before == <span class="type">Array</span>.unsafe_get buckets i</span><br><span class="line"> &amp;&amp; <span class="keyword">begin</span></span><br><span class="line"> <span class="type">Array</span>.unsafe_set buckets i after;</span><br><span class="line"> <span class="keyword">let</span> length = t.length + <span class="number">1</span> <span class="keyword">in</span></span><br><span class="line"> t.length &lt;- length;</span><br><span class="line"> <span class="keyword">if</span> n &lt; length &amp;&amp; n &lt; max_buckets_div_2 <span class="keyword">then</span> t.rehash &lt;- n * <span class="number">2</span>;</span><br><span class="line"> <span class="literal">true</span></span><br><span class="line"> <span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="keyword">rec</span> add t k&#x27; v&#x27; =</span><br><span class="line"> <span class="keyword">let</span> h = <span class="type">Mix</span>.<span class="built_in">int</span> k&#x27; <span class="keyword">in</span></span><br><span class="line"> maybe_rehash t;</span><br><span class="line"> <span class="keyword">let</span> buckets = t.buckets <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> n = <span class="type">Array</span>.length buckets <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> i = h <span class="keyword">land</span> (n - <span class="number">1</span>) <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> before = <span class="type">Array</span>.unsafe_get buckets i <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">let</span> after = <span class="type">Cons</span> (k&#x27;, v&#x27;, before) <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">if</span> not (add_atomically t buckets n i before after) <span class="keyword">then</span> add t k&#x27; v&#x27;</span><br></pre></td></tr></table></figure>
-
<p>相比使用 Stdlib.Mutex,这种无锁实现会有更好的性能(特别是对于只读操作),并且还允许例如信号处理之类的上下文操作。</p>
</div>
diff --git a/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html b/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html
index fa346797..decea234 100644
--- a/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html
+++ b/2023/08/15/tick-thread在Multicore-OCaml中的作用/index.html
@@ -194,7 +194,6 @@
<div class="post-content">
<p>Multicore OCaml的程序在启动时会运行一个 tick thread,其实现如下:</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* The tick thread: posts a SIGPREEMPTION signal periodically */</span></span><br><span class="line"></span><br><span class="line"><span class="type">static</span> <span class="type">void</span> * <span class="title function_">caml_thread_tick</span><span class="params">(<span class="type">void</span> * arg)</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="class"><span class="keyword">struct</span> <span class="title">timeval</span> <span class="title">timeout</span>;</span></span><br><span class="line"> <span class="type">sigset_t</span> mask;</span><br><span class="line"></span><br><span class="line"> <span class="comment">/* Block all signals so that we don&#x27;t try to execute an OCaml signal handler*/</span></span><br><span class="line"> sigfillset(&amp;mask);</span><br><span class="line"> pthread_sigmask(SIG_BLOCK, &amp;mask, <span class="literal">NULL</span>);</span><br><span class="line"> <span class="keyword">while</span>(! caml_tick_thread_stop) &#123;</span><br><span class="line"> <span class="comment">/* select() seems to be the most efficient way to suspend the</span></span><br><span class="line"><span class="comment"> thread for sub-second intervals */</span></span><br><span class="line"> timeout.tv_sec = <span class="number">0</span>;</span><br><span class="line"> timeout.tv_usec = Thread_timeout * <span class="number">1000</span>;</span><br><span class="line"> select(<span class="number">0</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, &amp;timeout);</span><br><span class="line"> <span class="comment">/* The preemption signal should never cause a callback, so don&#x27;t</span></span><br><span class="line"><span class="comment"> go through caml_handle_signal(), just record signal delivery via</span></span><br><span class="line"><span class="comment"> caml_record_signal(). */</span></span><br><span class="line"> caml_record_signal(SIGPREEMPTION);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>这是因为Multicore OCaml的GC目前需要一个进程(或一个Domain)中的所有线程一起参与以避免并发访问。如果一个线程在system call上被阻塞,那么整个Domain就会被卡住,直到该线程可以参与当前的垃圾收集。为了避免这个问题,tick 线程可以代替被阻塞的线程执行垃圾收集操作。</p>
</div>
diff --git a/2023/08/27/二零二三年八月二十七日/index.html b/2023/08/27/二零二三年八月二十七日/index.html
index 0a1837e8..3efbd1bf 100644
--- a/2023/08/27/二零二三年八月二十七日/index.html
+++ b/2023/08/27/二零二三年八月二十七日/index.html
@@ -184,9 +184,11 @@
</div>
</div>
<div class="post-content">
- <p>我从失去家人的那一刻就坠入了一个朦胧而美丽的梦,梦境没有主人,我是被梦境所留下的,永远不愿醒来的旅人。<br>我足不出户,一直缩在一方小世界里面,我用了无数的理由和所有人说我的生活态度,其实勇敢的人根本不需要理由就能走出去,只有懦弱的人会用各种理由说服自己退缩</p>
+ <p>我从失去家人的那一刻就坠入了一个朦胧而美丽的梦,梦境没有主人,我是被梦境所留下的,永远不愿醒来的旅人。<br>
+我足不出户,一直缩在一方小世界里面,我用了无数的理由和所有人说我的生活态度,其实勇敢的人根本不需要理由就能走出去,只有懦弱的人会用各种理由说服自己退缩</p>
<p>请以我为戒,大胆往前走,走到灯火通明。</p>
-<p>何须纵酒方能舞翩迁,<br>赤诚相见时便是少年。</p>
+<p>何须纵酒方能舞翩迁,<br>
+赤诚相见时便是少年。</p>
</div>
diff --git a/2023/09/13/二零二三年九月十三日/index.html b/2023/09/13/二零二三年九月十三日/index.html
index c9cdc9d4..848bca0a 100644
--- a/2023/09/13/二零二三年九月十三日/index.html
+++ b/2023/09/13/二零二三年九月十三日/index.html
@@ -185,7 +185,8 @@
</div>
<div class="post-content">
<p>“站好! 要拍了啊,倒数三秒,都不要眨眼。” 婚礼结束后, 门口路过的陌生男人拿着相机,充当起了临时的摄影师。</p>
-<p>镜头里,她和抱着雪狮的希文站在中间,她手边是依次排开的五个哥哥,希文手边是暮秋, 培元, 世琪, 婧灵五人。<br>在他们后排,其他人也各自找好位置挺直脊背站着。</p>
+<p>镜头里,她和抱着雪狮的希文站在中间,她手边是依次排开的五个哥哥,希文手边是暮秋, 培元, 世琪, 婧灵五人。<br>
+在他们后排,其他人也各自找好位置挺直脊背站着。</p>
<p>“拍了啊,倒数,三、二、一……茄子!”</p>
<p>咔擦,画面定格,幸福定格,大家终于从苦难里彻底毕业了。</p>
<p>萤火虫的微光与星空交相辉映,黑夜中潜滋暗长的花香沁人心脾,晚风挠过波光粼粼的海面,彼此相爱的人相拥而眠。</p>
diff --git a/2023/09/28/A-Brief-History-of-Just-In-Time/index.html b/2023/09/28/A-Brief-History-of-Just-In-Time/index.html
index eed4ed62..716d6750 100644
--- a/2023/09/28/A-Brief-History-of-Just-In-Time/index.html
+++ b/2023/09/28/A-Brief-History-of-Just-In-Time/index.html
@@ -192,14 +192,20 @@
</div>
</div>
<div class="post-content">
- <p>Software systems have been using “just-in-time” compilation (JIT) techniques since the<br>1960s. Broadly, JIT compilation includes any translation performed dynamically, after a<br>program has started execution. We examine the motivation behind JIT compilation and<br>constraints imposed on JIT compilation systems, and present a classification scheme for<br>such systems. This classification emerges as we survey forty years of JIT work, from<br>1960–2000.</p>
+ <p>Software systems have been using “just-in-time” compilation (JIT) techniques since the<br>
+1960s. Broadly, JIT compilation includes any translation performed dynamically, after a<br>
+program has started execution. We examine the motivation behind JIT compilation and<br>
+constraints imposed on JIT compilation systems, and present a classification scheme for<br>
+such systems. This classification emerges as we survey forty years of JIT work, from<br>
+1960–2000.</p>
<ul>
<li><a href="/papers/A%20Brief%20History%20of%20Just-In-Time.pdf">论文链接</a></li>
</ul>
<p>主要介绍了JIT的历史和发展过程, 从上世纪六十年代开始, 一直到现在的第四代JIT系统, 大概有三点:</p>
<ul>
<li>介绍了JIT每一代出现的动机和约束条件</li>
-<li>介绍了对各种JIT技术的分类方式<blockquote>
+<li>介绍了对各种JIT技术的分类方式
+<blockquote>
<ol>
<li>Invocation</li>
<li>Executability</li>
diff --git a/2023/10/05/v8中的Number-toString/index.html b/2023/10/05/v8中的Number-toString/index.html
index a311d7b1..6279fcc4 100644
--- a/2023/10/05/v8中的Number-toString/index.html
+++ b/2023/10/05/v8中的Number-toString/index.html
@@ -198,25 +198,20 @@
</ul>
<p>在很多地方都能看到:</p>
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">*isolate-&gt;<span class="built_in">factory</span>()-&gt;<span class="built_in">NumberToString</span>(value);</span><br></pre></td></tr></table></figure>
-<p>例如 <a target="_blank" rel="noopener" href="https://github.com/v8/v8/blob/df99ca37a9d02a3318d3e5487c7803f6230b8f5f/src/builtins/builtins-number.cc#L140">&#x2F;src&#x2F;builtins&#x2F;builtins-number.cc</a> 中。</p>
-<p>下面看看<code>NumberToString</code>的定义, 应该是在 <a target="_blank" rel="noopener" href="https://github.com/v8/v8/blob/829e8d18d73e21807c78223b0cc107c76c80da27/src/heap/factory-base.cc#L963-L978">src&#x2F;heap&#x2F;factory-base.cc</a> 中:</p>
+<p>例如 <a target="_blank" rel="noopener" href="https://github.com/v8/v8/blob/df99ca37a9d02a3318d3e5487c7803f6230b8f5f/src/builtins/builtins-number.cc#L140">/src/builtins/builtins-number.cc</a> 中。</p>
+<p>下面看看<code>NumberToString</code>的定义, 应该是在 <a target="_blank" rel="noopener" href="https://github.com/v8/v8/blob/829e8d18d73e21807c78223b0cc107c76c80da27/src/heap/factory-base.cc#L963-L978">src/heap/factory-base.cc</a> 中:</p>
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Impl&gt;</span><br><span class="line">Handle&lt;String&gt; FactoryBase&lt;Impl&gt;::<span class="built_in">NumberToString</span>(Handle&lt;Object&gt; number,</span><br><span class="line"> NumberCacheMode mode) &#123;</span><br><span class="line"> <span class="built_in">SLOW_DCHECK</span>(<span class="built_in">IsNumber</span>(*number));</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">IsSmi</span>(*number)) <span class="keyword">return</span> <span class="built_in">SmiToString</span>(Smi::<span class="built_in">cast</span>(*number), mode);</span><br><span class="line"></span><br><span class="line"> <span class="type">double</span> double_value = Handle&lt;HeapNumber&gt;::<span class="built_in">cast</span>(number)-&gt;<span class="built_in">value</span>();</span><br><span class="line"> <span class="comment">// Try to canonicalize doubles.</span></span><br><span class="line"> <span class="type">int</span> smi_value;</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">DoubleToSmiInteger</span>(double_value, &amp;smi_value)) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">SmiToString</span>(Smi::<span class="built_in">FromInt</span>(smi_value), mode);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">HeapNumberToString</span>(Handle&lt;HeapNumber&gt;::<span class="built_in">cast</span>(number), double_value,</span><br><span class="line"> mode);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>可以看到这里调用了 <code>SmiToString</code>, 这里不往下翻这个函数的定义, 只需要知道Smi是什么即可。 Smi 是一种特殊的整数类型,它被用于表示较小的整数值,通常在 32 位系统中是 31 位有符号整数。Smi 类型的值存储在指针的低位,而指针的高位用于标记该值是一个 Smi 类型。<code>IsSmi</code> 函数会检查给定的值是否为 Smi 类型,如果是,则返回 true,否则返回 false。这个函数通常用于 V8 引擎内部的优化和性能优化。</p>
<p>所以<code>NumberToString</code>会判断number是否是一个smi, 如果是的话就调用SmiToString, 否则会尝试将其转换为double再去调用<code>DoubleToSmiInteger</code>, 将<code>DoubleToSmiInteger</code>的调用结果存在<code>smi_value</code>里面, 再通过调用<code>SmiToString</code>将<code>smi_value</code>转换为字符串。</p>
<p>如果这两条路都行不通的话,就直接调用<code>HeapNumberToString</code>了。</p>
<p><code>HeapNumberToString</code>的定义如下:</p>
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Impl&gt;</span><br><span class="line">Handle&lt;String&gt; FactoryBase&lt;Impl&gt;::<span class="built_in">HeapNumberToString</span>(Handle&lt;HeapNumber&gt; number,</span><br><span class="line"> <span class="type">double</span> value,</span><br><span class="line"> NumberCacheMode mode) &#123;</span><br><span class="line"> <span class="type">int</span> hash = mode == NumberCacheMode::kIgnore</span><br><span class="line"> ? <span class="number">0</span></span><br><span class="line"> : <span class="built_in">impl</span>()-&gt;<span class="built_in">NumberToStringCacheHash</span>(value);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (mode == NumberCacheMode::kBoth) &#123;</span><br><span class="line"> Handle&lt;Object&gt; cached = <span class="built_in">impl</span>()-&gt;<span class="built_in">NumberToStringCacheGet</span>(*number, hash);</span><br><span class="line"> <span class="keyword">if</span> (!<span class="built_in">IsUndefined</span>(*cached, <span class="built_in">isolate</span>())) <span class="keyword">return</span> Handle&lt;String&gt;::<span class="built_in">cast</span>(cached);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> Handle&lt;String&gt; result;</span><br><span class="line"> <span class="keyword">if</span> (value == <span class="number">0</span>) &#123;</span><br><span class="line"> result = <span class="built_in">zero_string</span>();</span><br><span class="line"> &#125; <span class="keyword">else</span> <span class="keyword">if</span> (std::<span class="built_in">isnan</span>(value)) &#123;</span><br><span class="line"> result = <span class="built_in">NaN_string</span>();</span><br><span class="line"> &#125; <span class="keyword">else</span> &#123;</span><br><span class="line"> <span class="type">char</span> arr[kNumberToStringBufferSize];</span><br><span class="line"> <span class="function">base::Vector&lt;<span class="type">char</span>&gt; <span class="title">buffer</span><span class="params">(arr, arraysize(arr))</span></span>;</span><br><span class="line"> <span class="type">const</span> <span class="type">char</span>* string = <span class="built_in">DoubleToCString</span>(value, buffer);</span><br><span class="line"> result = <span class="built_in">CharToString</span>(<span class="keyword">this</span>, string, mode);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span> (mode != NumberCacheMode::kIgnore) &#123;</span><br><span class="line"> <span class="built_in">impl</span>()-&gt;<span class="built_in">NumberToStringCacheSet</span>(number, hash, result);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>就是熟知的NaN, Undefined处理,重点在:</p>
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">char</span> arr[kNumberToStringBufferSize];</span><br><span class="line"><span class="function">base::Vector&lt;<span class="type">char</span>&gt; <span class="title">buffer</span><span class="params">(arr, arraysize(arr))</span></span>;</span><br><span class="line"><span class="type">const</span> <span class="type">char</span>* string = <span class="built_in">DoubleToCString</span>(value, buffer);</span><br><span class="line">result = <span class="built_in">CharToString</span>(<span class="keyword">this</span>, string, mode);</span><br></pre></td></tr></table></figure>
-
-<p>这里调用了<code>DoubleToCString</code>, 其定义在 <a target="_blank" rel="noopener" href="https://github.com/v8/v8/blob/829e8d18d73e21807c78223b0cc107c76c80da27/src/numbers/conversions.cc#L1064-L1126">&#x2F;src&#x2F;numbers&#x2F;conversions.cc</a> 中:</p>
+<p>这里调用了<code>DoubleToCString</code>, 其定义在 <a target="_blank" rel="noopener" href="https://github.com/v8/v8/blob/829e8d18d73e21807c78223b0cc107c76c80da27/src/numbers/conversions.cc#L1064-L1126">/src/numbers/conversions.cc</a> 中:</p>
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">const</span> <span class="type">char</span>* <span class="title">DoubleToCString</span><span class="params">(<span class="type">double</span> v, base::Vector&lt;<span class="type">char</span>&gt; buffer)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">switch</span> (FPCLASSIFY_NAMESPACE::<span class="built_in">fpclassify</span>(v)) &#123;</span><br><span class="line"> <span class="keyword">case</span> FP_NAN:</span><br><span class="line"> <span class="keyword">return</span> <span class="string">&quot;NaN&quot;</span>;</span><br><span class="line"> <span class="keyword">case</span> FP_INFINITE:</span><br><span class="line"> <span class="keyword">return</span> (v &lt; <span class="number">0.0</span> ? <span class="string">&quot;-Infinity&quot;</span> : <span class="string">&quot;Infinity&quot;</span>);</span><br><span class="line"> <span class="keyword">case</span> FP_ZERO:</span><br><span class="line"> <span class="keyword">return</span> <span class="string">&quot;0&quot;</span>;</span><br><span class="line"> <span class="keyword">default</span>: &#123;</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">IsInt32Double</span>(v)) &#123;</span><br><span class="line"> <span class="comment">// This will trigger if v is -0 and -0.0 is stringified to &quot;0&quot;.</span></span><br><span class="line"> <span class="comment">// (see ES section 7.1.12.1 #sec-tostring-applied-to-the-number-type)</span></span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">IntToCString</span>(<span class="built_in">FastD2I</span>(v), buffer);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="function">SimpleStringBuilder <span class="title">builder</span><span class="params">(buffer.begin(), buffer.length())</span></span>;</span><br><span class="line"> <span class="type">int</span> decimal_point;</span><br><span class="line"> <span class="type">int</span> sign;</span><br><span class="line"> <span class="type">const</span> <span class="type">int</span> kV8DtoaBufferCapacity = base::kBase10MaximalLength + <span class="number">1</span>;</span><br><span class="line"> <span class="type">char</span> decimal_rep[kV8DtoaBufferCapacity];</span><br><span class="line"> <span class="type">int</span> length;</span><br><span class="line"></span><br><span class="line"> base::<span class="built_in">DoubleToAscii</span>(</span><br><span class="line"> v, base::DTOA_SHORTEST, <span class="number">0</span>,</span><br><span class="line"> base::<span class="built_in">Vector</span>&lt;<span class="type">char</span>&gt;(decimal_rep, kV8DtoaBufferCapacity), &amp;sign,</span><br><span class="line"> &amp;length, &amp;decimal_point);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (sign) builder.<span class="built_in">AddCharacter</span>(<span class="string">&#x27;-&#x27;</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (length &lt;= decimal_point &amp;&amp; decimal_point &lt;= <span class="number">21</span>) &#123;</span><br><span class="line"> <span class="comment">// ECMA-262 section 9.8.1 step 6.</span></span><br><span class="line"> builder.<span class="built_in">AddString</span>(decimal_rep);</span><br><span class="line"> builder.<span class="built_in">AddPadding</span>(<span class="string">&#x27;0&#x27;</span>, decimal_point - length);</span><br><span class="line"></span><br><span class="line"> &#125; <span class="keyword">else</span> <span class="keyword">if</span> (<span class="number">0</span> &lt; decimal_point &amp;&amp; decimal_point &lt;= <span class="number">21</span>) &#123;</span><br><span class="line"> <span class="comment">// ECMA-262 section 9.8.1 step 7.</span></span><br><span class="line"> builder.<span class="built_in">AddSubstring</span>(decimal_rep, decimal_point);</span><br><span class="line"> builder.<span class="built_in">AddCharacter</span>(<span class="string">&#x27;.&#x27;</span>);</span><br><span class="line"> builder.<span class="built_in">AddString</span>(decimal_rep + decimal_point);</span><br><span class="line"></span><br><span class="line"> &#125; <span class="keyword">else</span> <span class="keyword">if</span> (decimal_point &lt;= <span class="number">0</span> &amp;&amp; decimal_point &gt; <span class="number">-6</span>) &#123;</span><br><span class="line"> <span class="comment">// ECMA-262 section 9.8.1 step 8.</span></span><br><span class="line"> builder.<span class="built_in">AddString</span>(<span class="string">&quot;0.&quot;</span>);</span><br><span class="line"> builder.<span class="built_in">AddPadding</span>(<span class="string">&#x27;0&#x27;</span>, -decimal_point);</span><br><span class="line"> builder.<span class="built_in">AddString</span>(decimal_rep);</span><br><span class="line"></span><br><span class="line"> &#125; <span class="keyword">else</span> &#123;</span><br><span class="line"> <span class="comment">// ECMA-262 section 9.8.1 step 9 and 10 combined.</span></span><br><span class="line"> builder.<span class="built_in">AddCharacter</span>(decimal_rep[<span class="number">0</span>]);</span><br><span class="line"> <span class="keyword">if</span> (length != <span class="number">1</span>) &#123;</span><br><span class="line"> builder.<span class="built_in">AddCharacter</span>(<span class="string">&#x27;.&#x27;</span>);</span><br><span class="line"> builder.<span class="built_in">AddString</span>(decimal_rep + <span class="number">1</span>);</span><br><span class="line"> &#125;</span><br><span class="line"> builder.<span class="built_in">AddCharacter</span>(<span class="string">&#x27;e&#x27;</span>);</span><br><span class="line"> builder.<span class="built_in">AddCharacter</span>((decimal_point &gt;= <span class="number">0</span>) ? <span class="string">&#x27;+&#x27;</span> : <span class="string">&#x27;-&#x27;</span>);</span><br><span class="line"> <span class="type">int</span> exponent = decimal_point - <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">if</span> (exponent &lt; <span class="number">0</span>) exponent = -exponent;</span><br><span class="line"> builder.<span class="built_in">AddDecimalInteger</span>(exponent);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> builder.<span class="built_in">Finalize</span>();</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>不用过多解释, 已经很清晰了, <code>FastD2I</code> 就是 Fast Double to Integer的意思, 定义如下, 注释也很详尽:</p>
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// The fast double-to-(unsigned-)int conversion routine does not guarantee</span></span><br><span class="line"><span class="comment">// rounding towards zero.</span></span><br><span class="line"><span class="comment">// The result is undefined if x is infinite or NaN, or if the rounded</span></span><br><span class="line"><span class="comment">// integer value is outside the range of type int.</span></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="type">int</span> <span class="title">FastD2I</span><span class="params">(<span class="type">double</span> x)</span> </span>&#123;</span><br><span class="line"> <span class="built_in">DCHECK</span>(x &lt;= INT_MAX);</span><br><span class="line"> <span class="built_in">DCHECK</span>(x &gt;= INT_MIN);</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">static_cast</span>&lt;<span class="type">int32_t</span>&gt;(x);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
<p>以上</p>
</div>
diff --git a/2023/10/12/血常规化验结果阅读指南/index.html b/2023/10/12/血常规化验结果阅读指南/index.html
index d184ed4a..369d6c48 100644
--- a/2023/10/12/血常规化验结果阅读指南/index.html
+++ b/2023/10/12/血常规化验结果阅读指南/index.html
@@ -313,29 +313,38 @@ mjx-container[display="true"] + br {
<p>这里我给出一些常见的值,更详细的听医生说哦,我们以下图为例:</p>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E8%A1%80%E5%B8%B8%E8%A7%84%E5%8C%96%E9%AA%8C%E5%8D%95Demo.jpeg" alt="血常规化验单Demo"></p>
<ul>
-<li>红细胞 (RBC)<ul>
+<li>红细胞 (RBC)
+<ul>
<li>正常情况: 男性 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="20.587ex" height="2.52ex" role="img" focusable="false" viewBox="0 -864 9099.6 1114"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" transform="translate(778,0)"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(1278,0)"></path></g><g data-mml-node="mo" transform="translate(2389.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(3389.4,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" transform="translate(778,0)"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(1278,0)"></path></g><g data-mml-node="mo" transform="translate(5167.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mi" transform="translate(5556.4,0)"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path></g><g data-mml-node="msup" transform="translate(6128.4,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="TeXAtom" transform="translate(1033,393.1) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" transform="translate(500,0)"></path></g></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7918.6,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(8418.6,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container> , 女性 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="20.587ex" height="2.52ex" role="img" focusable="false" viewBox="0 -864 9099.6 1114"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" transform="translate(778,0)"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(1278,0)"></path></g><g data-mml-node="mo" transform="translate(2389.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(3389.4,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" transform="translate(778,0)"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(1278,0)"></path></g><g data-mml-node="mo" transform="translate(5167.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mi" transform="translate(5556.4,0)"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path></g><g data-mml-node="msup" transform="translate(6128.4,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="TeXAtom" transform="translate(1033,393.1) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" transform="translate(500,0)"></path></g></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7918.6,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(8418.6,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况:<ol>
+<li>异常情况:
+<ol>
<li>升高: 真性红细胞增多症, 严重脱水, 肺源性心脏病, 先天性心脏病, 高山地区的居民和严重烧伤等</li>
<li>降低: 贫血</li>
</ol>
</li>
</ul>
</li>
-<li>血红蛋白 (HGB)<ul>
+<li>血红蛋白 (HGB)
+<ul>
<li>正常情况: 男性 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="13.933ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 6158.4 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(2111.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(3111.4,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mo" transform="translate(4111.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mi" transform="translate(4500.4,0)"><path data-c="1D454" d="M311 43Q296 30 267 15T206 0Q143 0 105 45T66 160Q66 265 143 353T314 442Q361 442 401 394L404 398Q406 401 409 404T418 412T431 419T447 422Q461 422 470 413T480 394Q480 379 423 152T363 -80Q345 -134 286 -169T151 -205Q10 -205 10 -137Q10 -111 28 -91T74 -71Q89 -71 102 -80T116 -111Q116 -121 114 -130T107 -144T99 -154T92 -162L90 -164H91Q101 -167 151 -167Q189 -167 211 -155Q234 -144 254 -122T282 -75Q288 -56 298 -13Q311 35 311 43ZM384 328L380 339Q377 350 375 354T369 368T359 382T346 393T328 402T306 405Q262 405 221 352Q191 313 171 233T151 117Q151 38 213 38Q269 38 323 108L331 118L384 328Z"></path></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(4977.4,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(5477.4,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container>, 女性 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="13.933ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 6158.4 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(2111.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(3111.4,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mo" transform="translate(4111.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mi" transform="translate(4500.4,0)"><path data-c="1D454" d="M311 43Q296 30 267 15T206 0Q143 0 105 45T66 160Q66 265 143 353T314 442Q361 442 401 394L404 398Q406 401 409 404T418 412T431 419T447 422Q461 422 470 413T480 394Q480 379 423 152T363 -80Q345 -134 286 -169T151 -205Q10 -205 10 -137Q10 -111 28 -91T74 -71Q89 -71 102 -80T116 -111Q116 -121 114 -130T107 -144T99 -154T92 -162L90 -164H91Q101 -167 151 -167Q189 -167 211 -155Q234 -144 254 -122T282 -75Q288 -56 298 -13Q311 35 311 43ZM384 328L380 339Q377 350 375 354T369 368T359 382T346 393T328 402T306 405Q262 405 221 352Q191 313 171 233T151 117Q151 38 213 38Q269 38 323 108L331 118L384 328Z"></path></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(4977.4,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(5477.4,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况<ol>
+<li>异常情况
+<ol>
<li>升高: 真性红细胞增多症, 严重脱水, 肺源性心脏病, 先天性心脏病, 高山地区的居民和严重烧伤等</li>
<li>降低: 贫血</li>
</ol>
</li>
</ul>
</li>
-<li>白细胞 (WBC)<ul>
+<li>白细胞 (WBC)
+<ul>
<li>正常情况: 男女都是 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="15.476ex" height="2.52ex" role="img" focusable="false" viewBox="0 -864 6840.4 1114"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z"></path></g><g data-mml-node="mo" transform="translate(1111.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(2111.4,0)"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z"></path></g><g data-mml-node="mo" transform="translate(2611.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(3222.7,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z"></path></g><g data-mml-node="msup" transform="translate(4222.9,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mn" transform="translate(1033,393.1) scale(0.707)"><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z"></path></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(5659.4,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(6159.4,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况<ol>
-<li>升高: 各种细胞感染, 炎症, 严重烧伤<ul>
-<li><h3 id="当白细胞明显升高,-甚至于-350-pm-150-times-10-9-L-,-并伴有发热,出血,贫血等症状的时候,应当警惕白血病"><a href="#当白细胞明显升高,-甚至于-350-pm-150-times-10-9-L-,-并伴有发热,出血,贫血等症状的时候,应当警惕白血病" class="headerlink" title="当白细胞明显升高, 甚至于 $(350 \pm 150) \times 10^9 / L$ , 并伴有发热,出血,贫血等症状的时候,应当警惕白血病"></a>当白细胞明显升高, 甚至于 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="20.001ex" height="2.52ex" role="img" focusable="false" viewBox="0 -864 8840.4 1114"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(2111.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(3111.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(4611.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(5222.7,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z"></path></g><g data-mml-node="msup" transform="translate(6222.9,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mn" transform="translate(1033,393.1) scale(0.707)"><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z"></path></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7659.4,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(8159.4,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container> , 并伴有发热,出血,贫血等症状的时候,应当警惕白血病</h3></li>
+<li>异常情况
+<ol>
+<li>升高: 各种细胞感染, 炎症, 严重烧伤
+<ul>
+<li>
+<h3 id="当白细胞明显升高,-甚至于-350-pm-150-times-10-9-L-,-并伴有发热,出血,贫血等症状的时候,应当警惕白血病"><a class="header-anchor" href="#当白细胞明显升高,-甚至于-350-pm-150-times-10-9-L-,-并伴有发热,出血,贫血等症状的时候,应当警惕白血病">¶</a>当白细胞明显升高, 甚至于 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="20.001ex" height="2.52ex" role="img" focusable="false" viewBox="0 -864 8840.4 1114"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(2111.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(3111.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(4611.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(5222.7,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z"></path></g><g data-mml-node="msup" transform="translate(6222.9,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mn" transform="translate(1033,393.1) scale(0.707)"><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z"></path></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7659.4,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(8159.4,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container> , 并伴有发热,出血,贫血等症状的时候,应当警惕白血病</h3>
+</li>
</ul>
</li>
<li>降低: 白细胞减少症, 脾功能亢进, 造血功能障碍等</li>
@@ -343,27 +352,33 @@ mjx-container[display="true"] + br {
</li>
</ul>
</li>
-<li>中性粒细胞比率 (NEUTP)<ul>
+<li>中性粒细胞比率 (NEUTP)
+<ul>
<li>正常情况: 男女都是 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="9.051ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 4000.4 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mo" transform="translate(1611.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(2611.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mo" transform="translate(3611.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况<ul>
+<li>异常情况
+<ul>
<li>升高:炎症, 各种感染 (细菌病毒都有)</li>
<li>降低: 各种感染 (病毒感染多见), 中性粒细胞减少症</li>
</ul>
</li>
</ul>
</li>
-<li>淋巴细胞数 (LYM)<ul>
+<li>淋巴细胞数 (LYM)
+<ul>
<li>正常情况: 男女都是 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="18.996ex" height="2.52ex" role="img" focusable="false" viewBox="0 -864 8396.4 1114"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" transform="translate(778,0)"></path></g><g data-mml-node="mo" transform="translate(1889.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(2889.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(778,0)"></path></g><g data-mml-node="mo" transform="translate(4167.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(4778.7,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z"></path></g><g data-mml-node="msup" transform="translate(5778.9,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mn" transform="translate(1033,393.1) scale(0.707)"><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z"></path></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7215.4,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(7715.4,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况:<ul>
+<li>异常情况:
+<ul>
<li>升高: 百日咳, 传染性单核细胞增多症, 急性传染性淋巴细胞增多症, 淋巴细胞性白血病等</li>
<li>降低: 免疫缺陷等</li>
</ul>
</li>
</ul>
</li>
-<li>血小板 (PLT)<ul>
+<li>血小板 (PLT)
+<ul>
<li>正常情况: 男女都是 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="20.001ex" height="2.52ex" role="img" focusable="false" viewBox="0 -864 8840.4 1114"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(2111.2,0)"><path data-c="B1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g data-mml-node="mn" transform="translate(3111.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" transform="translate(500,0)"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)"></path></g><g data-mml-node="mo" transform="translate(4611.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(5222.7,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z"></path></g><g data-mml-node="msup" transform="translate(6222.9,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mn" transform="translate(1033,393.1) scale(0.707)"><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z"></path></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7659.4,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(8159.4,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况:<ul>
+<li>异常情况:
+<ul>
<li>升高: 原发性血小板增多症, 真性红细胞增多症, 慢性白血病, 症状性血小板增多症, 感染, 炎症, 恶性肿瘤, 缺铁性贫血, 外伤, 手术, 出血等</li>
<li>降低: 原发性血小板减少性紫癜, 播散性红斑狼疮, 药物过敏性血小板减少症, 弥漫性血管内凝血, 血小板破坏增多, 血小板生成减少等</li>
</ul>
diff --git a/2023/10/13/肝功能检查化验单/index.html b/2023/10/13/肝功能检查化验单/index.html
index 2b33c49b..563938db 100644
--- a/2023/10/13/肝功能检查化验单/index.html
+++ b/2023/10/13/肝功能检查化验单/index.html
@@ -310,34 +310,41 @@ mjx-container[display="true"] + br {
</div>
</div>
<div class="post-content">
- <p><img src="/img/%E5%8C%BB%E5%AD%A6/%E8%82%9D%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E5%8C%96%E9%AA%8C%E5%8D%95Demo.jpeg"></p>
+ <p><img src="/img/%E5%8C%BB%E5%AD%A6/%E8%82%9D%E5%8A%9F%E8%83%BD%E6%A3%80%E6%9F%A5%E5%8C%96%E9%AA%8C%E5%8D%95Demo.jpeg" alt=""></p>
<ul>
-<li><p>谷丙转氨酶 (ALT)</p>
+<li>
+<p>谷丙转氨酶 (ALT)</p>
<ul>
<li>正常情况: <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="6.67ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 2948 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mi" transform="translate(1000,0)"><path data-c="1D448" d="M107 637Q73 637 71 641Q70 643 70 649Q70 673 81 682Q83 683 98 683Q139 681 234 681Q268 681 297 681T342 682T362 682Q378 682 378 672Q378 670 376 658Q371 641 366 638H364Q362 638 359 638T352 638T343 637T334 637Q295 636 284 634T266 623Q265 621 238 518T184 302T154 169Q152 155 152 140Q152 86 183 55T269 24Q336 24 403 69T501 205L552 406Q599 598 599 606Q599 633 535 637Q511 637 511 648Q511 650 513 660Q517 676 519 679T529 683Q532 683 561 682T645 680Q696 680 723 681T752 682Q767 682 767 672Q767 650 759 642Q756 637 737 637Q666 633 648 597Q646 592 598 404Q557 235 548 205Q515 105 433 42T263 -22Q171 -22 116 34T60 167V183Q60 201 115 421Q164 622 164 628Q164 635 107 637Z"></path></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(1767,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(2267,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况:<ul>
+<li>异常情况:
+<ul>
<li>升高: 可见于肝胆疾病, 急慢性肝炎, 胆石症引起的胆道梗阻等,某些药物造成的肝脏损伤也可引起</li>
</ul>
</li>
</ul>
</li>
-<li><p>谷草转氨酶 (AST)</p>
+<li>
+<p>谷草转氨酶 (AST)</p>
<ul>
<li>正常情况: <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="6.67ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 2948 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z"></path><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)"></path></g><g data-mml-node="mi" transform="translate(1000,0)"><path data-c="1D448" d="M107 637Q73 637 71 641Q70 643 70 649Q70 673 81 682Q83 683 98 683Q139 681 234 681Q268 681 297 681T342 682T362 682Q378 682 378 672Q378 670 376 658Q371 641 366 638H364Q362 638 359 638T352 638T343 637T334 637Q295 636 284 634T266 623Q265 621 238 518T184 302T154 169Q152 155 152 140Q152 86 183 55T269 24Q336 24 403 69T501 205L552 406Q599 598 599 606Q599 633 535 637Q511 637 511 648Q511 650 513 660Q517 676 519 679T529 683Q532 683 561 682T645 680Q696 680 723 681T752 682Q767 682 767 672Q767 650 759 642Q756 637 737 637Q666 633 648 597Q646 592 598 404Q557 235 548 205Q515 105 433 42T263 -22Q171 -22 116 34T60 167V183Q60 201 115 421Q164 622 164 628Q164 635 107 637Z"></path></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(1767,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(2267,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
-<li>异常情况:<ul>
+<li>异常情况:
+<ul>
<li>升高: 可见于急慢性肝炎等肝脏疾病以及某些药物的毒副作用, 与ALT主要提示肝脏疾病不同,AST还可以存在于心肌,骨骼肌,肾脏,所以AST升高还可见于心肌梗死,心肌炎,肌溶解等疾病。</li>
</ul>
</li>
</ul>
</li>
-<li><p>血清胆红素</p>
+<li>
+<p>血清胆红素</p>
+<ul>
+<li>正常情况:
<ul>
-<li>正常情况:<ul>
<li>总胆红素 (TBLL): <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="16.971ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 7501 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mn" transform="translate(1722.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" transform="translate(500,0)"></path></g><g data-mml-node="mi" transform="translate(2722.4,0)"><path data-c="1D707" d="M58 -216Q44 -216 34 -208T23 -186Q23 -176 96 116T173 414Q186 442 219 442Q231 441 239 435T249 423T251 413Q251 401 220 279T187 142Q185 131 185 107V99Q185 26 252 26Q261 26 270 27T287 31T302 38T315 45T327 55T338 65T348 77T356 88T365 100L372 110L408 253Q444 395 448 404Q461 431 491 431Q504 431 512 424T523 412T525 402L449 84Q448 79 448 68Q448 43 455 35T476 26Q485 27 496 35Q517 55 537 131Q543 151 547 152Q549 153 557 153H561Q580 153 580 144Q580 138 575 117T555 63T523 13Q510 0 491 -8Q483 -10 467 -10Q446 -10 429 -4T402 11T385 29T376 44T374 51L368 45Q362 39 350 30T324 12T288 -4T246 -11Q199 -11 153 12L129 -85Q108 -167 104 -180T92 -202Q76 -216 58 -216Z"></path></g><g data-mml-node="mo" transform="translate(3603.2,0)"><path data-c="3E" d="M84 520Q84 528 88 533T96 539L99 540Q106 540 253 471T544 334L687 265Q694 260 694 250T687 235Q685 233 395 96L107 -40H101Q83 -38 83 -20Q83 -19 83 -17Q82 -10 98 -1Q117 9 248 71Q326 108 378 132L626 250L378 368Q90 504 86 509Q84 513 84 520Z"></path></g><g data-mml-node="mi" transform="translate(4659,0)"><path data-c="1D45A" d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mi" transform="translate(5537,0)"><path data-c="1D45C" d="M201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120Z"></path></g><g data-mml-node="mi" transform="translate(6022,0)"><path data-c="1D459" d="M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z"></path></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(6320,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(6820,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
<li>直接胆红素 (DBIL): <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="19.353ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 8554 1000"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mn" transform="translate(1722.4,0)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" transform="translate(778,0)"></path><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" transform="translate(1278,0)"></path></g><g data-mml-node="mo" transform="translate(3778.2,0)"><path data-c="3E" d="M84 520Q84 528 88 533T96 539L99 540Q106 540 253 471T544 334L687 265Q694 260 694 250T687 235Q685 233 395 96L107 -40H101Q83 -38 83 -20Q83 -19 83 -17Q82 -10 98 -1Q117 9 248 71Q326 108 378 132L626 250L378 368Q90 504 86 509Q84 513 84 520Z"></path></g><g data-mml-node="mi" transform="translate(4834,0)"><path data-c="1D45A" d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mi" transform="translate(5712,0)"><path data-c="1D45A" d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mi" transform="translate(6590,0)"><path data-c="1D45C" d="M201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120Z"></path></g><g data-mml-node="mi" transform="translate(7075,0)"><path data-c="1D459" d="M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z"></path></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7373,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z"></path></g></g><g data-mml-node="mi" transform="translate(7873,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path></g></g></g></svg></mjx-container></li>
</ul>
</li>
-<li>异常情况:<ul>
+<li>异常情况:
+<ul>
<li>升高: 如果伴随转氨酶升高,多见于黄疸型肝炎,或其他疾病造成的黄疸症状。如果没有伴随转氨酶升高,那么可能是先天性胆红素代谢异常或慢性溶血。</li>
</ul>
</li>
diff --git a/2023/10/21/OCaml-Core-Int-pow-的实现/index.html b/2023/10/21/OCaml-Core-Int-pow-的实现/index.html
index f3d3c513..280f484c 100644
--- a/2023/10/21/OCaml-Core-Int-pow-的实现/index.html
+++ b/2023/10/21/OCaml-Core-Int-pow-的实现/index.html
@@ -192,24 +192,25 @@
</div>
</div>
<div class="post-content">
- <p>Core内部直接引用的Base的实现, Base的实现在 <a target="_blank" rel="noopener" href="https://github.com/janestreet/base/blob/494a0876168d24cda695cbb9a3d86ad8d1eb97d8/src/int_math.ml#L11-L18">src&#x2F;int_math.ml</a> 中:</p>
+ <p>Core内部直接引用的Base的实现, Base的实现在 <a target="_blank" rel="noopener" href="https://github.com/janestreet/base/blob/494a0876168d24cda695cbb9a3d86ad8d1eb97d8/src/int_math.ml#L11-L18">src/int_math.ml</a> 中:</p>
<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> int_pow base exponent =</span><br><span class="line"> <span class="keyword">if</span> exponent &lt; <span class="number">0</span> <span class="keyword">then</span> negative_exponent <span class="literal">()</span>;</span><br><span class="line"> <span class="keyword">if</span> abs base &gt; <span class="number">1</span></span><br><span class="line"> &amp;&amp; (exponent &gt; <span class="number">63</span></span><br><span class="line"> || abs base &gt; <span class="type">Pow_overflow_bounds</span>.int_positive_overflow_bounds.(exponent))</span><br><span class="line"> <span class="keyword">then</span> overflow <span class="literal">()</span>;</span><br><span class="line"> int_math_int_pow base exponent</span><br><span class="line">;;</span><br></pre></td></tr></table></figure>
-
<p>其中 <code>int_math_int_pow()</code> 由 C 实现:</p>
<figure class="highlight ocaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">external</span> int_math_int_pow : <span class="built_in">int</span> -&gt; <span class="built_in">int</span> -&gt; <span class="built_in">int</span> = <span class="string">&quot;Base_int_math_int_pow_stub&quot;</span> [@@noalloc]</span><br></pre></td></tr></table></figure>
-
-<p>其实现在 <a target="_blank" rel="noopener" href="https://github.com/janestreet/base/blob/494a0876168d24cda695cbb9a3d86ad8d1eb97d8/src/int_math_stubs.c#L56-L92">src&#x2F;int_math_stubs.c</a> 中:</p>
+<p>其实现在 <a target="_blank" rel="noopener" href="https://github.com/janestreet/base/blob/494a0876168d24cda695cbb9a3d86ad8d1eb97d8/src/int_math_stubs.c#L56-L92">src/int_math_stubs.c</a> 中:</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">static</span> <span class="type">int64_t</span> <span class="title function_">int_pow</span><span class="params">(<span class="type">int64_t</span> base, <span class="type">int64_t</span> exponent)</span> &#123;</span><br><span class="line"> <span class="type">int64_t</span> ret = <span class="number">1</span>;</span><br><span class="line"> <span class="type">int64_t</span> mul[<span class="number">4</span>];</span><br><span class="line"> mul[<span class="number">0</span>] = <span class="number">1</span>;</span><br><span class="line"> mul[<span class="number">1</span>] = base;</span><br><span class="line"> mul[<span class="number">3</span>] = <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> (exponent != <span class="number">0</span>) &#123;</span><br><span class="line"> mul[<span class="number">1</span>] *= mul[<span class="number">3</span>];</span><br><span class="line"> mul[<span class="number">2</span>] = mul[<span class="number">1</span>] * mul[<span class="number">1</span>];</span><br><span class="line"> mul[<span class="number">3</span>] = mul[<span class="number">2</span>] * mul[<span class="number">1</span>];</span><br><span class="line"> ret *= mul[exponent &amp; <span class="number">3</span>];</span><br><span class="line"> exponent &gt;&gt;= <span class="number">2</span>;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> ret;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-
-<p>这是一个四分快速幂的实现,它是二分快速幂的一种变种。二分快速幂将指数分为两部分,然后递归地计算每一部分的结果。<br>而四分快速幂将指数分为四部分,然后递归地计算每一部分的结果。<br>这里通过将指数右移2位(相当于除以4)和使用位与操作来实现,进一步减少了乘法次数。</p>
+<p>这是一个四分快速幂的实现,它是二分快速幂的一种变种。二分快速幂将指数分为两部分,然后递归地计算每一部分的结果。<br>
+而四分快速幂将指数分为四部分,然后递归地计算每一部分的结果。<br>
+这里通过将指数右移2位(相当于除以4)和使用位与操作来实现,进一步减少了乘法次数。</p>
<p>主要步骤:</p>
<ul>
<li>初始化返回值ret为1,和一个包含4个元素的数组mul, mul[0]和mul[3]被初始化为1, mul[1]被初始化为基数</li>
-<li>当指数不为0时,执行循环, 在每次循环中,首先更新mul数组的值<blockquote>
+<li>当指数不为0时,执行循环, 在每次循环中,首先更新mul数组的值
+<blockquote>
<p>mul[1]是基数和mul[3]的乘积,mul[2]是mul[1]的平方,mul[3]是mul[2]和基数的乘积</p>
</blockquote>
</li>
-<li>然后,将ret乘以mul数组中的一个元素, 这个元素的索引是指数和3的位与运算的结果<blockquote>
+<li>然后,将ret乘以mul数组中的一个元素, 这个元素的索引是指数和3的位与运算的结果
+<blockquote>
<p>这样做的目的是为了选择正确的乘数,因为指数被分解为4的倍数</p>
</blockquote>
</li>
diff --git a/2023/10/22/冬季咳嗽辨别指南/index.html b/2023/10/22/冬季咳嗽辨别指南/index.html
index c639c30b..c58bcc1f 100644
--- a/2023/10/22/冬季咳嗽辨别指南/index.html
+++ b/2023/10/22/冬季咳嗽辨别指南/index.html
@@ -201,10 +201,13 @@
<p>这里给出一些在冬季,临床上简单诊断咳嗽的例子,仅供参考, 无论结果如何, 立刻就医.</p>
<p>这里简单分成有痰和无痰(或痰少)两类, 然后分别以时间段细分:</p>
<ul>
-<li>有痰<ul>
-<li>夜间咳:<ul>
+<li>有痰
+<ul>
+<li>夜间咳:
+<ul>
<li>刚睡着就咳嗽,坐起来会好点: 可能是鼻涕倒流刺激咽喉, 也可能是上呼吸道感染, 比如过敏性或非过敏性鼻炎, 急慢性鼻窦炎</li>
-<li>凌晨四五点咳醒:<ul>
+<li>凌晨四五点咳醒:
+<ul>
<li>长期如此: 考虑哮喘发作</li>
<li>短期如此: 考虑支气管炎</li>
</ul>
@@ -212,29 +215,35 @@
<li>睡到一半胸闷气短, 咳嗽甚至咳出带血丝的痰: 考虑心脏病</li>
</ul>
</li>
-<li>每天不定时咳嗽: 这种情况在临床上一般是烟抽多了, 也有可能是慢性肺阻塞, 慢性支气管炎, 支气管扩张, 肺气肿引起的<ul>
+<li>每天不定时咳嗽: 这种情况在临床上一般是烟抽多了, 也有可能是慢性肺阻塞, 慢性支气管炎, 支气管扩张, 肺气肿引起的
+<ul>
<li>带血,呼吸困难,体重下降:考虑肺结核或肺癌</li>
</ul>
</li>
-<li>无特定时间咳嗽:<ul>
+<li>无特定时间咳嗽:
+<ul>
<li>伴有鼻子难受, 浑身乏力等: 考虑过敏, 环境过敏,(比如像新装修的屋子里的甲醛)或者药物过敏(比如降压药)</li>
</ul>
</li>
</ul>
</li>
-<li>无痰(或痰少)<ul>
+<li>无痰(或痰少)
+<ul>
<li>白天咳: 常见于急慢性咽喉炎(一开口说话就想咳嗽, 不说话或睡大觉的时候不想咳)</li>
-<li>夜间咳<ul>
+<li>夜间咳
+<ul>
<li>睡着睡着突然猛咳, 还有胸闷胀气, 口干口苦, 声音嘶哑, 心灼热之类的症状: 一般是胃食管反流导致的</li>
<li>睡眠中咳嗽不止,像被呛到一样, 睡得浅梦还多: 考虑上呼吸道阻塞症候群, 可能与睡眠暂停呼吸症有关</li>
</ul>
</li>
-<li>每天不定时咳嗽:<ul>
+<li>每天不定时咳嗽:
+<ul>
<li>小孩和老人首先判断是否误吸异物</li>
<li>否则可能是咽喉神经过度敏感</li>
</ul>
</li>
-<li>无特定时间咳嗽: <ul>
+<li>无特定时间咳嗽:
+<ul>
<li>可能由于某些心理问题, 紧张焦虑之类的</li>
</ul>
</li>
@@ -244,12 +253,14 @@
<hr>
<p>接下来是一些参考的, 以食疗为主的方子, 注意, 不要随便吃药, 无论如何遵医嘱, 考虑自己身体情况, 过敏原.</p>
<ol>
-<li>咳嗽多痰可以以芦根为主, 竹茹入肺, 胃两经, 可以清肺化痰<ul>
+<li>咳嗽多痰可以以芦根为主, 竹茹入肺, 胃两经, 可以清肺化痰
+<ul>
<li>新鲜芦根100克,竹茹15克,芦根切碎和竹茹一起放水里煎一会儿,然后用汁水煮粥喝</li>
<li>配合甘草也可以平喘止咳,但注意,脾胃虚寒的话不可用: 芦根50克, 甘草5克, 加1L水煮沸十分钟,去掉渣渣喝100毫升, 喝多了也不太好.</li>
</ul>
</li>
-<li>当然还有常见的冰糖雪梨啦, 经典的润肺止咳:<ul>
+<li>当然还有常见的冰糖雪梨啦, 经典的润肺止咳:
+<ul>
<li>买个漂亮的大梨, 顶上削一块, 挖空里面, 把挖出来的果肉切块重新放进去, 再加入川贝母粉, 冰糖, 陈皮, 大火煮沸之后立刻转小火蒸三刻钟</li>
</ul>
</li>
diff --git a/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html b/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html
index 9ba35a13..2d6bf40c 100644
--- a/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html
+++ b/2023/10/25/Radiographic-Absence-of-the-Left-Humeral-Head/index.html
@@ -196,7 +196,7 @@
<p>Ten years prior to presentation, he underwent surgical decompression for syringomyelia.</p>
<p>A magnetic resonance imaging (MRI) scan of his cervical and thoracic spine performed 2 years prior to presentation revealed a recurrent syrinx extending from Cl C1 to T11, which was not resected because it did not cause symptoms at that time.</p>
<p>On physical examination, he had mild tenderness to palpation and reduced range of motion of the left shoulder with abduction and flexion limited to 120° (normal range of motion, 180°).</p>
-<p>The left scapular muscles were atrophic, and pain and temperature sensation were reduced in his proximal left arm, and dorsal aspect of his left shoulder. </p>
+<p>The left scapular muscles were atrophic, and pain and temperature sensation were reduced in his proximal left arm, and dorsal aspect of his left shoulder.</p>
<p>His complete blood cell count, serum glucose levels, C-reactive protein levels, and erythrocyte sedimentation rate were normal.</p>
<p>Results of tests for rheumatoid factor and antinuclear antibody were negative.</p>
<p>Left shoulder radiograph showed complete absence of the left humeral head and a well-demarcated smooth osseous margin of the proximal humerus with associated soft tissue swelling and periarticular calcification.</p>
@@ -204,7 +204,8 @@
<ul>
<li><a href="/papers/Radiographic%20Absence%20of%20the%20Left%20Humeral%20Head.pdf">报告原档</a></li>
</ul>
-<p>这里提到了一种罕见的进展性疾病, 叫Charcot肩, 是一种神经性关节病变,特点是关节迅速被破坏和相关软组织肿胀。患者通常表现为肩部逐渐增大的肿胀,可能伴有疼痛或无痛,肩部无力和活动范围减少。<br>大约80%的Charcot肩患者有脊髓空洞症, 表现为脊髓中的液体充满腔体</p>
+<p>这里提到了一种罕见的进展性疾病, 叫Charcot肩, 是一种神经性关节病变,特点是关节迅速被破坏和相关软组织肿胀。患者通常表现为肩部逐渐增大的肿胀,可能伴有疼痛或无痛,肩部无力和活动范围减少。<br>
+大约80%的Charcot肩患者有脊髓空洞症, 表现为脊髓中的液体充满腔体</p>
</div>
diff --git a/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html b/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html
index df9e760b..1339432d 100644
--- a/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html
+++ b/2023/10/25/儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例/index.html
@@ -192,7 +192,9 @@
</div>
</div>
<div class="post-content">
- <p>患儿 男, 3 岁 10 月龄,因“间歇发热 2 周伴咳嗽、气促”入上海交通大学医学院附属仁济医院(南部院区)定点医院隔离病房。<br>患儿病初发热,确诊为新型冠状病毒肺炎(简称新冠肺炎),热退 2d 再次持续高热&gt;3d 伴气促、吸气性凹陷,胸部 CT 示右肺下叶片状密度影,诊断“重型新冠肺炎”,行支气管镜肺泡灌洗,宏基因组病原检测确诊为混合肺炎支原体感染,治疗好转出院。<br>提示临床医生诊治重型新冠肺炎时需警惕混合感染</p>
+ <p>患儿 男, 3 岁 10 月龄,因“间歇发热 2 周伴咳嗽、气促”入上海交通大学医学院附属仁济医院(南部院区)定点医院隔离病房。<br>
+患儿病初发热,确诊为新型冠状病毒肺炎(简称新冠肺炎),热退 2d 再次持续高热&gt;3d 伴气促、吸气性凹陷,胸部 CT 示右肺下叶片状密度影,诊断“重型新冠肺炎”,行支气管镜肺泡灌洗,宏基因组病原检测确诊为混合肺炎支原体感染,治疗好转出院。<br>
+提示临床医生诊治重型新冠肺炎时需警惕混合感染</p>
<ul>
<li><a href="../papers/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B.pdf">报告原档</a></li>
</ul>
diff --git a/2023/10/25/肺炎支原体注意事项/index.html b/2023/10/25/肺炎支原体注意事项/index.html
index b4f73b28..adb5fdb4 100644
--- a/2023/10/25/肺炎支原体注意事项/index.html
+++ b/2023/10/25/肺炎支原体注意事项/index.html
@@ -199,60 +199,70 @@
</div>
<div class="post-content">
<ol>
-<li>什么是肺炎支原体<ul>
+<li>什么是肺炎支原体
+<ul>
<li>大小介于细菌和病毒之间的病原微生物, 缺乏细胞壁, 对作用于细胞壁的抗菌药物 (例如青霉素和头孢) 有耐药性</li>
<li>感染不分季节的, 不过一般是北方地区秋冬季流行, 南方地区夏秋季流行</li>
<li>一般多见于五岁以上的儿童, 但五岁以下也可能感染并发病</li>
</ul>
</li>
-<li>肺炎支原体如何传播<ul>
+<li>肺炎支原体如何传播
+<ul>
<li>主要通过飞沫和直接接触传播</li>
<li>潜伏期为一到三周</li>
<li>从潜伏期到症状缓解均有传染性</li>
</ul>
</li>
-<li>肺炎支原体感染有何症状表现<ul>
+<li>肺炎支原体感染有何症状表现
+<ul>
<li>主要临床表现为发热, 咳嗽, 头痛, 流涕, 咽痛, 耳痛等</li>
<li>轻者可能无症状或是上呼吸道感染</li>
<li>重者可能导致肺炎, 肺实变, 胸腔积液, 坏死性肺炎</li>
</ul>
</li>
-<li>成年人是否也会感染肺炎支原体<ul>
+<li>成年人是否也会感染肺炎支原体
+<ul>
<li>长时间和肺炎支原体感染的患者相处很有可能会被感染</li>
<li>如果出现发热, 剧烈咳嗽, 甚至有肺部表现, 要及时去医院</li>
</ul>
</li>
-<li>如何分辨肺炎支原体感染和普通感冒<ul>
+<li>如何分辨肺炎支原体感染和普通感冒
+<ul>
<li>初期感染上呼吸道时, 存在和普通感染类似的症状, 例如鼻塞咽痛发热等</li>
<li>可以通过血清抗体检测, 核酸检测等检出</li>
<li>医生可以通过根据患者的病史, 症状和体征结合相关的常规化检查来综合判断</li>
<li>常人可以通过判断咳嗽情况判断: 一般会出现阵发性, 成串的咳嗽, 早期是干咳, 咳嗽比较剧烈. 或有发热持续不退, 咳嗽加重等情况</li>
</ul>
</li>
-<li>治疗肺炎支原体的常用药物<ul>
+<li>治疗肺炎支原体的常用药物
+<ul>
<li>最佳的治疗窗口期为发热后五到十天之内</li>
<li>一线治疗药物以大环内酯类抗生素为主, 比如阿奇霉素, 红霉素, 克拉霉素</li>
<li>对于耐大环内酯类抗菌药物的患者要考虑其他药物</li>
<li>如果感染比较严重, 重症支原体感染, 则需要综合治疗, 比如糖皮质激素以及支气管镜介入治疗</li>
</ul>
</li>
-<li>如何判断是否需要住院治疗<ul>
+<li>如何判断是否需要住院治疗
+<ul>
<li>轻症经过大环内酯类药物一般均能控制病情, 但体温正常之后咳嗽可能还会持续两周左右, 胸片肺炎阴影基本均可吸收</li>
<li>重症需要住院, 重症可能会有混合病毒或者细菌感染, 要加用相应的药物治疗</li>
</ul>
</li>
-<li>耐药和不耐药患者的治疗差异<ul>
+<li>耐药和不耐药患者的治疗差异
+<ul>
<li>并无太大差异, 主要是耐药患者退烧时间会更长, 换言之病程较长</li>
</ul>
</li>
-<li>支原体肺炎是否会引发白肺<ul>
+<li>支原体肺炎是否会引发白肺
+<ul>
<li>可能会, 但是跟双肺弥漫性病变的白肺是两个概念</li>
<li>通过拍背排痰, 药物祛痰, 支气管镜治疗等手段, 患者可以在较短的时间内痊愈, 基本不会引发生命危险</li>
<li>重症及难治性肺炎支原体感染患者可能会遗留肺结构或功能损害</li>
</ul>
</li>
</ol>
-<h2 id="支原体肺炎-流感-新冠肺炎的区别"><a href="#支原体肺炎-流感-新冠肺炎的区别" class="headerlink" title="支原体肺炎, 流感, 新冠肺炎的区别"></a>支原体肺炎, 流感, 新冠肺炎的区别</h2><table>
+<h2 id="支原体肺炎-流感-新冠肺炎的区别"><a class="header-anchor" href="#支原体肺炎-流感-新冠肺炎的区别">¶</a>支原体肺炎, 流感, 新冠肺炎的区别</h2>
+<table>
<thead>
<tr>
<th>区别</th>
@@ -261,7 +271,8 @@
<th>新冠肺炎</th>
</tr>
</thead>
-<tbody><tr>
+<tbody>
+<tr>
<td>致病菌</td>
<td>肺炎支原体</td>
<td>流感病毒</td>
@@ -309,7 +320,8 @@
<td>有一定自限性, 一般一周内好转</td>
<td>一般7~14天可好转</td>
</tr>
-</tbody></table>
+</tbody>
+</table>
</div>
diff --git a/2023/11/16/Fever-of-Unknown-Origin/index.html b/2023/11/16/Fever-of-Unknown-Origin/index.html
index 6bbe05b9..e0a3a1b7 100644
--- a/2023/11/16/Fever-of-Unknown-Origin/index.html
+++ b/2023/11/16/Fever-of-Unknown-Origin/index.html
@@ -192,13 +192,16 @@
</div>
</div>
<div class="post-content">
- <p>Fever of unknown origin (FUO) has been recognized as a disease state for over100 years.<br>The first commonly accepted definition of FUO was published in 1961 and included fever greater than 101F (38.3C) on multiple occasions at least 3 week duration of fever without identifiable cause despite at least a 1 week inpatient evaluation.</p>
-<p>Overtime, this definition was considered both too rigid and too ill defined.<br>Given the impracticality of prolonged hospitalizations and advancing technology for diagnosis, the duration of work up was shortened to 3 days inpatient evaluation and&#x2F;or 3 outpatient clinic visits.</p>
+ <p>Fever of unknown origin (FUO) has been recognized as a disease state for over100 years.<br>
+The first commonly accepted definition of FUO was published in 1961 and included fever greater than 101F (38.3C) on multiple occasions at least 3 week duration of fever without identifiable cause despite at least a 1 week inpatient evaluation.</p>
+<p>Overtime, this definition was considered both too rigid and too ill defined.<br>
+Given the impracticality of prolonged hospitalizations and advancing technology for diagnosis, the duration of work up was shortened to 3 days inpatient evaluation and/or 3 outpatient clinic visits.</p>
<ul>
<li><a href="/papers/Fever%20of%20Unknown%20Origin.pdf">Original Document</a></li>
</ul>
-<p>这是FUO(不明原因发烧)的综合指南,第一个普遍接受的 FUO 定义是1961 年发布的,包括多次发烧超过三十八度三,发烧持续时间至少 3 周,并且就算住院至少 1 周但仍无明确原因。后面这个定义被认为过于僵化且过于模糊。又改成了三天住院评估和&#x2F;或三次门。除了有关评估持续时间的所有时间要求,还应该将 FUO 定义为完成最低限度检查后缺乏已知病因的发烧。</p>
-<p>常见原因就感染性,自身免疫和结缔组织疾病,其他炎症过程和恶性肿瘤。结缔组织疾病和自身免疫性疾病是青少年 FUO 比儿童更常见的原因。<br>总体上有超过两百种病因可导致 FUO</p>
+<p>这是FUO(不明原因发烧)的综合指南,第一个普遍接受的 FUO 定义是1961 年发布的,包括多次发烧超过三十八度三,发烧持续时间至少 3 周,并且就算住院至少 1 周但仍无明确原因。后面这个定义被认为过于僵化且过于模糊。又改成了三天住院评估和/或三次门。除了有关评估持续时间的所有时间要求,还应该将 FUO 定义为完成最低限度检查后缺乏已知病因的发烧。</p>
+<p>常见原因就感染性,自身免疫和结缔组织疾病,其他炎症过程和恶性肿瘤。结缔组织疾病和自身免疫性疾病是青少年 FUO 比儿童更常见的原因。<br>
+总体上有超过两百种病因可导致 FUO</p>
</div>
diff --git a/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html b/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html
index e6893084..c4881963 100644
--- a/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html
+++ b/2023/11/21/Adolescent-Onset-of-Acute-Heart-Failure/index.html
@@ -197,7 +197,8 @@
<ul>
<li><a href="/papers/Approach%20to%20Idiopathic%20Anaphylaxis%20in%20Adolescents.pdf">原始文章</a></li>
</ul>
-<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>端坐呼吸或端坐呼吸是平躺时发生的呼吸短促,导致患者不得不支撑在床上或坐在椅子上睡觉。它通常被视为心力衰竭的晚期表现,是由于液体重新分布到中央循环,导致肺毛细血管压力增加并导致呼吸困难所致。它也见于腹部肥胖或肺部疾病的情况。端坐呼吸与平呼吸相反,平呼吸是指坐或站直时呼吸急促会加重。</p>
+<h2 id="其他"><a class="header-anchor" href="#其他">¶</a>其他</h2>
+<p>端坐呼吸或端坐呼吸是平躺时发生的呼吸短促,导致患者不得不支撑在床上或坐在椅子上睡觉。它通常被视为心力衰竭的晚期表现,是由于液体重新分布到中央循环,导致肺毛细血管压力增加并导致呼吸困难所致。它也见于腹部肥胖或肺部疾病的情况。端坐呼吸与平呼吸相反,平呼吸是指坐或站直时呼吸急促会加重。</p>
</div>