Émilie du Châtelet

看《传承和交汇》(Bentley et al., 2021. Traditions & Encounters: A Global Perspective on the Past) 的时候发现了这位或许是 18 世纪最杰出的女性科学家,于是简单了解了一下。

Émilie du Châtelet (1706—1749) 出生在巴黎贵族家庭,小时候被父亲发现智力天赋,提供了像男孩那样的精英教育。她掌握多种语言,并对数学和天文学爆发极大热情。19 岁成为 Châtelet 侯爵夫人,履行完生育继承人的义务后,各自保留极大生活自由,聘请顶尖数学家自学高等数学。27 岁和伏尔泰相爱,将伏尔泰庇护在侯爵的一处庄园。两人长期在庄园共同研究、写作。伏尔泰赞叹 Émilie 是自己在数学和物理上的引导者。

Émilie 在物理上有原创贡献,试图调和牛顿、莱布尼茨和笛卡尔的不同观点。既重视牛顿力学的数学成就,也关心力、运动、空间和因果关系背后的哲学基础。牛顿的《自然哲学数学原理》艰深难懂,Émilie 从拉丁文译为法文,并加入大量注释说明和数学补充,后来长期作为标准法语译本。

42 岁的 Émilie 在一段新恋情后意外怀孕,预感到自己时日无多,疯狂推进《自然哲学数学原理》的翻译校对工作。生下女儿的第四天,完成了最后一章校对,把手稿寄出。第六天,因严重产后感染离世。

重新安装 Windows 系统后,怎样用 WinGet 批量安装软件

过去我重装系统之前会把已经安装的软件列表截个图,装好系统后再对照截图去软件官网下载安装包,逐个安装。最近因为接触到 Linux 和 macOS 上的包管理软件(package manager,例如 apt, dnf, Homebrew),就觉得 Windows 上如果也能用类似的方式来安装软件应该会更方便、优雅,于是开始接触到 WinGet (Windows Package Manager),Windows 11 自带的包管理器,也用命令行的方式来安装软件。

WinGet 基本命令

搜索和安装

用 WinGet 安装某个特定的软件大致分两步,先搜索包 ID,再输入包 ID 安装。

首先我们打开 PowerShell。可以用右键单击 Windows 徽标(左键单击是打开开始菜单的那个图标),选择 Terminal(终端);也可以在开始菜单里找到 PowerShell。

例如我想安装 PotPlayer,就在命令行中输入以下代码,意思是搜索包含 potplayer 的包:

winget search potplayer

可能会返回多个搜索结果,这时候需要一点点判断力,通常 WinGet 的 ID 名是 Axx.Bxx 的格式,其中 Axx 是开发方或项目名称,Bxx 是软件的名称。所以搜索结果中的 Daum.PotPlayer 就是我们要找的 PotPlayer 的包 ID。于是我们运行第二步:

winget install Daum.PotPlayer

其中 Daum.PotPlayer 既可以自己录入,也可以从搜索结果中复制粘贴。PowerShell 中,复制是选中一段文本后点击右键,粘贴是直接点击右键。

卸载

如果需要卸载软件,可以用 uninstall 命令,例如要卸载刚刚安装的 PotPlayer,就运行:

winget uninstall Daum.PotPlayer

如果是之前安装的软件,已经不记得包 ID 了,可以用 list 查看已安装的软件。list 命令看到的软件既有用 WinGet 安装的(Source 列会标注 winget),也有用其他方式安装的,但其他方式安装的软件未必可以用 WinGet 顺利卸载。

winget list

升级

用 WinGet 升级软件可以先用 upgrade 命令查看哪些软件可以升级(并不会直接执行升级)。

winget upgrade

如果查看后想升级上述列表中的所有软件,可以运行:

winget upgrade --all

如果想要升级某个特定的软件,就复制它的包 ID,例如:

winget upgrade Daum.PotPlayer

批量安装脚本

我们搜索的包 ID 还可以保存起来,今后重装系统之后,就可以用保存起来的包 ID 逐一运行 install 命令,这样也省去了之前逐一去软件官网下载的麻烦,也不需要安装可能有捆绑软件和广告的各类软件管家。

除了逐一安装之外,还可以把你保存起来的包 ID 清单发给 AI,让 ta 写一个用 WinGet 批量安装这些软件的 PowerShell 脚本,直接粘贴到 PowerShell 中运行,等待安装即可。

现在我用的批量安装代码如下,可以按照这个格式自行增减要安装的软件:

$apps = @(
"SublimeHQ.SublimeText.4",
"Daum.PotPlayer",
"Valve.Steam",
"HandBrake.HandBrake",
"Cryptomator.Cryptomator",
"WinFsp.WinFsp",
"PDFArranger.PDFArranger",
"Anki.Anki",
"FastStone.Viewer",
"ShareX.ShareX",
"voidtools.Everything",
"M2Team.NanaZip",
"chrox.Readest",
"LocalSend.LocalSend",
"Gyan.FFmpeg"
)

foreach ($app in $apps) {
    winget install --id $app --exact --source winget --accept-package-agreements --accept-source-agreements
}

使用 apt-offline 为离线 Linux(Debian/Ubuntu/UOS/银河麒麟)电脑安装应用

以前主要使用 Windows 系统,如果要为一台没有连接互联网的电脑安装软件,只需要在官网下载对应版本(通常只需要选择是 x86 还是 x64)的 .exe 安装包或者 portable 压缩包,再到离线电脑上安装或解压使用即可。

最近接触到 Linux 系统,安装软件的逻辑很不一样。如果是联网的 Linux 电脑,可以通过应用商店或者命令行安装,比 Windows 系统常见的安装方式更加方便安全。但如果是离线的 Linux 电脑,就既不能使用应用商店和命令行(直接联网下载后安装),也不能像 Windows 系统一样拷贝 .exe 安装包来安装。

Linux 的软件安装更像是「拼积木」,安装 A 软件,可能需要 B, C, D… 等依赖,其中 D 可能又需要 E 依赖,所以需要先从离线电脑上生成一个「采购清单」,到联网电脑上下载相应的软件,再拷贝到离线电脑上安装。我们可以用 apt-offline 这个软件来实现。

0. 适用条件

离线电脑

使用 apt-offline 为离线电脑安装软件的前提是这台离线电脑使用 apt 软件管理器,适用于 Debian 系 Linux 系统(包括 Ubuntu、Debian 以及 UOS、Deepin、银河麒麟 V10 等国产系统)。简单测试的方式是,打开「终端」,输入 apt 回车,如果返回「apt: command not found」就不适用,如果返回一串 apt 用法说明则可以适用。

联网电脑

可以运行 apt-offline 即可。Linux 系统更方便,Windows 系统也能用。下文以 Linux 为例,Windows 的用法在文末有简单说明。

1. 在两台电脑上安装 apt-offline

1.1 联网电脑安装

sudo apt install apt-offline

可通过以下命令验证是否安装成功。

apt-offline --version

1.2 离线电脑安装

在联网电脑上下载 apt-offline 软件包(*.deb),比如在 pkgs.org 下载(这个软件和架构无关,选 amd64 和 arm64 下载的都是 apt-offline_*_all.deb 文件)。

https://pkgs.org/download/apt-offline

在离线电脑上双击 .deb 文件安装即可。如果出错,可以从命令行安装查看报错信息。

sudo dpkg -i apt-offline_*.deb

2. 通过 apt-offline 安装软件

(可选)离线电脑更新软件列表

如果离线电脑已经离线较长时间,没有更新软件列表,则先执行以下步骤。

在离线电脑上生成更新请求(会创建 update.sig 文件)

sudo apt-offline set update.sig --update

将 update.sig 拷贝到联网电脑上,执行以下命令下载数据

apt-offline get update.sig --bundle update.zip

将 update.zip 拷贝到离线电脑,执行以下命令更新软件列表

sudo apt-offline install update.zip

2.1 离线电脑上生成安装需求

以安装 PDF arranger(一个轻量的用于 PDF 合并/拆分/旋转页面的软件)为例。

sudo apt-offline set pdf-arranger.sig --install-packages pdfarranger

这会创建一个 pdf-arranger.sig 文件,拷贝到联网的电脑。

如果报错(例如 Unable to locate package),请先执行上述可选步骤更新软件列表。

2.2 在联网电脑上按需下载安装包

注意修改 .sig 文件和下载后生成的 .zip 文件的路径

apt-offline get /path/to/pdf-arranger.sig --bundle pdf-arranger.zip

2.3 传回离线电脑安装

将上一步生成的 .zip 压缩包拷贝到离线电脑执行以下 2 条命令先导入、再安装,注意修改路径

导入命令

sudo apt-offline install pdf-arranger.zip

安装命令

sudo apt install pdfarranger

如果联网的电脑是 Windows 系统

在 Windows 系统上,apt-offline 作为 Python 脚本运行。

  • 先安装 Python,安装时勾选「Add Python to PATH」。
  • GitHub 发布页下载 apt-offline 用于 Windows 系统的 zip 压缩包,解压到特定目录。
  • 在解压后的 apt-offline 文件夹上按右键,选择 Open in Terminal(在终端中打开)。
  • 按需下载安装包时改用以下命令即可(以安装 PDF arranger 为例,其他软件请修改名称)。
python apt-offline get /path/to/pdf-arranger.sig --bundle pdf-arranger.zip

不重新编码视频,智能调整视频文件音量

以前遇到这种需要调整视频音量的情况,我可能会使用 Adobe Premiere Pro 为音频轨道加一个 Hard Limiter 的 effect,重新导出,然后用 Handbrake 再编码一次……这样做的时间成本比较高,也很可能因为重新编码而损失视频质量。最近遇到类似问题后和 AI 讨论了一个使用 Python 代码调用 FFmpeg 的方案,就只需要重新编码视频的音频部分,视频部分不受影响。

基本思路

像 *.mp4, *.mkv 这样的视频文件,是用一个容器把视频、音频、字幕等不同的数据包装在一起,所以视频、音频、字幕可以通过 FFmpeg 来分别处理。

使用 AI 生成的这段 Python 脚本,可以调用 FFmpeg 分析音频响度,自动解析 loudnorm 输出的 JSON,用分析结果进行第二遍修正,输出一个视频不重新编码、音量统一的视频文件。

音量调整有 3 个参数,按照 AI 的建议,整体听感响度按照网络视频标准设置为 -16 LUFS,峰值安全上限设置为 -1.5 dBTP 防止削波失真,动态范围约束为 11 LU 控制最大和最小音量之间的差值。如果希望详细了解可以用上一句话去请 AI 展开讲解,也可以根据自己的实际需要修改以上参数。

准备工作

需要安装 FFmpegPython

如果对安装步骤有疑问,可以直接问 AI。例如「Windows 11 系统怎样安装 FFmpeg?」

代码主体

将以下代码保存为 .py 文件,例如可以命名为 loudnorm_2pass.py。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import argparse
import json
import re
import shutil
import subprocess
import sys
from pathlib import Path
from typing import Any, Dict, List, Optional, Tuple

def run_capture(cmd: List[str]) -> subprocess.CompletedProcess:
    """
    运行命令并捕获 stdout/stderr(用于第一遍抓 JSON)。
    注意:我们会显式加 -nostdin(在 cmd 里),避免 ffmpeg 等待交互输入。
    """
    print("\n>>", " ".join(cmd))
    return subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

def run_passthrough(cmd: List[str]) -> int:
    """
    运行命令并将输出直接打印到终端(用于第二遍,让用户看到进度/报错)。
    """
    print("\n>>", " ".join(cmd))
    p = subprocess.run(cmd)
    return p.returncode

def must_exist_executable(name: str) -> None:
    if shutil.which(name) is None:
        raise SystemExit(f"未找到 {name}。请先安装并确保 {name} 在 PATH 中。")

def resolve_path(p: str) -> str:
    return str(Path(p).expanduser().resolve())

def ffprobe_audio_streams(input_path: str) -> Tuple[int, Dict[str, Any]]:
    """
    返回 (音频流数量, ffprobe 原始 JSON)。
    """
    must_exist_executable("ffprobe")
    cmd = [
        "ffprobe",
        "-hide_banner",
        "-v", "error",
        "-print_format", "json",
        "-show_streams",
        "-select_streams", "a",
        input_path,
    ]
    r = run_capture(cmd)
    if r.returncode != 0:
        raise SystemExit(f"ffprobe 失败:\n{r.stderr}")
    try:
        data = json.loads(r.stdout)
    except json.JSONDecodeError:
        raise SystemExit("ffprobe 输出解析失败(非 JSON)。")
    streams = data.get("streams", []) or []
    return len(streams), data

def find_last_json_object(text: str) -> Dict[str, Any]:
    """
    从 ffmpeg stderr 中提取 loudnorm 的 JSON 块。
    采用“取最后一个 { 到最后一个 }”的策略,并验证必须包含 loudnorm 关键字段。
    """
    start = text.rfind("{")
    end = text.rfind("}")
    if start == -1 or end == -1 or end <= start:
        raise RuntimeError("未在 FFmpeg 输出中找到 loudnorm JSON。请确认第一遍使用了 print_format=json,且输入包含音频流。")

    blob = text[start:end + 1].strip()
    try:
        obj = json.loads(blob)
    except json.JSONDecodeError as e:
        raise RuntimeError(f"解析 loudnorm JSON 失败:{e}\nJSON片段:\n{blob}")

    # loudnorm JSON 的关键字段校验
    for k in ("input_i", "input_tp", "input_lra", "input_thresh"):
        if k not in obj:
            raise RuntimeError(f"找到的 JSON 不像 loudnorm 输出,缺少字段 {k}\nJSON片段:\n{blob}")

    return obj
    raise RuntimeError("未在 FFmpeg 输出中找到 loudnorm JSON。请确认第一遍使用了 print_format=json,且输入包含音频流。")

def main() -> None:
    parser = argparse.ArgumentParser(
        description="Two-pass EBU R128 loudnorm: copy video, normalize audio; robust non-interactive workflow."
    )
    parser.add_argument("input", help="Input video file (e.g., input.mp4)")
    parser.add_argument("output", help="Output video file (e.g., output.mp4)")

    parser.add_argument("--I", default="-16", help="Target integrated loudness (LUFS), default -16")
    parser.add_argument("--TP", default="-1.5", help="Target true peak (dBTP), default -1.5")
    parser.add_argument("--LRA", default="11", help="Target loudness range, default 11")

    parser.add_argument("--audio-index", type=int, default=0, help="Which audio stream index to process, default 0 (i.e., 0:a:0)")
    parser.add_argument("--audio-codec", default="aac", help="Audio codec for output, default aac")
    parser.add_argument("--audio-bitrate", default="192k", help="Audio bitrate, default 192k")

    parser.add_argument("--keep-subtitles", action="store_true", help="Copy subtitle streams if present (0:s?)")
    parser.add_argument("--no-overwrite", action="store_true", help="Do not overwrite output if it exists (default: overwrite with -y)")
    parser.add_argument("--max-muxing-queue-size", type=int, default=1024, help="Set FFmpeg -max_muxing_queue_size, default 1024")

    args = parser.parse_args()

    must_exist_executable("ffmpeg")
    must_exist_executable("ffprobe")

    inp = resolve_path(args.input)
    out = resolve_path(args.output)

    # 0) 预检查:音频流是否存在
    audio_count, _ = ffprobe_audio_streams(inp)
    if audio_count == 0:
        raise SystemExit("输入文件未检测到任何音频流(audio stream)。无法进行 loudnorm 处理。")
    if args.audio_index < 0 or args.audio_index >= audio_count:
        raise SystemExit(f"--audio-index={args.audio_index} 超出范围:此文件音频流数量为 {audio_count}(有效范围 0..{audio_count-1})。")
    if audio_count > 1:
        print(f"提示:检测到 {audio_count} 条音频流。本脚本默认只处理 0:a:{args.audio_index}(可用 --audio-index 指定)。")

    # 输出文件覆盖策略
    if Path(out).exists() and args.no_overwrite:
        raise SystemExit(f"输出文件已存在且启用了 --no-overwrite:{out}")

    # 1) Pass 1: analysis
    analysis_filter = f"loudnorm=I={args.I}:TP={args.TP}:LRA={args.LRA}:print_format=json"
    cmd1 = [
        "ffmpeg",
        "-hide_banner",
        "-nostdin",         # 关键:禁止交互输入,避免“看似卡死”
        "-i", inp,
        "-map", f"0:a:{args.audio_index}",
        "-filter:a", analysis_filter,
        "-f", "null", "-"
    ]
    r1 = run_capture(cmd1)
    if r1.returncode != 0:
        print(r1.stderr, file=sys.stderr)
        raise SystemExit("第一遍分析失败。")

    info = find_last_json_object(r1.stderr)

    # 必要字段
    measured_I = info.get("input_i")
    measured_TP = info.get("input_tp")
    measured_LRA = info.get("input_lra")
    measured_thresh = info.get("input_thresh")

    print("\n=== Pass1 measurement ===")
    print(json.dumps(info, ensure_ascii=False, indent=2))

    # 2) Pass 2: normalization
    norm_filter = (
        f"loudnorm=I={args.I}:TP={args.TP}:LRA={args.LRA}:"
        f"measured_I={measured_I}:measured_TP={measured_TP}:"
        f"measured_LRA={measured_LRA}:measured_thresh={measured_thresh}"
    )

    cmd2 = [
        "ffmpeg",
        "-hide_banner",
        "-nostdin",
        "-y" if not args.no_overwrite else "-n",  # -y 覆盖;-n 不覆盖
        "-i", inp,
        "-map", "0:v",
        "-map", f"0:a:{args.audio_index}",
        "-c:v", "copy",
        "-filter:a", norm_filter,
        "-c:a", args.audio_codec,
        "-b:a", args.audio_bitrate,
        "-max_muxing_queue_size", str(args.max_muxing_queue_size),
        "-movflags", "+faststart"
    ]

    if args.keep_subtitles:
        cmd2 += ["-map", "0:s?"]  # 若存在字幕流则复制

    cmd2 += [out]

    # 第二遍建议直通输出,用户能看到进度与报错
    rc2 = run_passthrough(cmd2)
    if rc2 != 0:
        raise SystemExit("第二遍处理失败。")

    print("\n完成。输出文件:", out)

if __name__ == "__main__":
    main()

运行方式

在命令行中执行以下代码

python loudnorm_2pass.py input.mp4 output.mp4

注意将 Python 脚本、输入输出视频文件修改为正确的路径,例如

python "D:\loudnorm_2pass.py" "D:\Cuts\TownScaper.mp4" "D:\Cuts\TownScaper_2.mp4"

注意 output.mp4 这部分是新生成的视频文件的路径,如果该文件已经存在将被覆盖。

如果视频文件有多个音轨,可以加入 –audio-index 参数运行。

知识只属于人类吗?

Why is it that when a human draws a fern it is art, but when matter grows into a fern, it is not? When humans keep track of a solar day with a calendar, we call this science, but when plants do it, we call it mechanical response. Why? Plants may not write out mathematical formulas on paper with pencils, but in some sense don’t they perform the most daring non-linear equations with their fractal limbs?

为什么人画出蕨类植物被称为艺术,而物质生长成蕨类植物却不是?当人类用日历记录太阳日时,我们称之为科学,而当植物做同样的事情时,我们却称之为机械反应。为什么?植物不会用铅笔在纸上写出数学公式,但从某种意义上说,它们难道不通过分形般的枝叶完成了最大胆的非线性方程吗?

Nail, T. (2022) Theory of the Object

后续:这本书讲线性和非线性的部分(第 259 页)犯的基本知识错误有些无法容忍,尽管全书有些新意,但就这个低级错误来说非常不推荐阅读。

Clear as Mud

By 1945 top economics departments in the United States were filled with young scholars who had both learned and implemented (through direct policymaking) the new economic ideas of the day. The time was ripe for a new textbook that could teach these ideas to the largest generation of students (expanded massively by the GI Bill) ever to attend college. And no one thought for a moment that Keynes’s great book could serve as such an introduction: the exposition of ideas in that text was obtuse and impenetrable — clear as mud. (Chambers, 2022, p. x)

到 1945 年,美国顶尖的经济学系充满了年轻的学者。他们学习并且(通过直接制定政策)实施了新的经济学思想。当时又迎来了最大规模的大学新生。引入新教材讲授这些经济学思想的时机已经成熟。然而,没有人想过要把凯恩斯的巨著作为入门教材。那本书写得晦涩难懂,清晰如泥。

Chambers, S. A. (2022). Capitalist Economics. Oxford University Press

(as) clear as mud

[humorous] very difficult to understand (Cambridge, Macmillan dictionary)

His instructions were as clear as mud.

His explanation was as clear as mud.

真实的统计数据也会骗人

2022 年 4 月 3 日,国内媒体转述了俄罗斯官员的说法,称「美国强迫欧洲制裁俄罗斯的同时,在最近一周自己购买俄罗斯石油的量却增加了 43%,达到了每天 10 万桶。但是美国却不允许欧洲这样做」。西方主流媒体未见报道,但能搜到一些没听说过名字的英文网站刊载了这条新闻。

出于好奇,我就现查了一些数据。发现这是一个很好的例子,怎样用真实的数据误导大众。

美国能源信息署 (Energy Information Administration, EIA) 官网(国内可以直接访问)上可以查到数据来源。Weekly Preliminary Crude Imports by Top 10 Countries of Origin (ranking based on 2020 Petroleum Supply Monthly data)

https://www.eia.gov/dnav/pet/pet_move_wimpc_s1_w.htm

2022 年 3 月第 4 周比第 3 周增加了 43% (100/70-1) 不假,但看到这条新闻的人里有多少知道美国从俄罗斯进口的原油只占是前十大来源总和的 1.8% (100/5533) 呢?而增加 43% 之前的占比是 1.2% (70/5867)。还可以用这个网站上的历史数据画个图表看看趋势。

添加图片注释,不超过 140 字(可选)

还可以用这个历史数据画个面积图看看俄罗斯原油的占比从 2021 年下半年至今变动情况(顶部灰色下方的棕色区域)。

添加图片注释,不超过 140 字(可选)

同样来自这个网站的数据,2021 年荷兰、德国、波兰和其他 OECD 欧洲国家进口的俄罗斯石油是每天 2.33 百万桶,同期美国进口的数据是 0.20,中国是 1.41。Europe is a key destination for Russia’s energy exports

https://www.eia.gov/todayinenergy/detail.php?id=51618

搜索过程中还发现了这些媒体文章,能够相互印证:

How much oil does the US get from Russia? | Al Jazeera 2022/3/3
美国从俄罗斯得到多少石油?| 半岛电视台网 2022/3/3

Here’s where Russian oil flows: The countries that import Russian crude and other petroleum products — and what it would take to turn off the spigot | The Washington Post, 2022/3/8

An EU ban on Russian oil would be self-defeating | Quartz 2022/3/22

了解俄乌冲突的中文资料推荐

播客节目

悬崖边上的乌克兰:过去、现在与未来
王磬、路尘「不合时宜」
2022 年 2 月 26 日

349. 乌克兰和俄罗斯,有怎样的历史纠缠?
348. 俄罗斯和北约,有过怎样的“爱恨情仇”?
347. 乌克兰危机是怎么回事,会给我们带来什么影响?
梁文道「八分」
2022 年 2 月 18 日, 23 日, 25 日

项飙专访:俄乌战争与日常意义
项飙、吴琦「螺丝在拧紧」
2022 年 4 月 7 日

文章

俄罗斯和乌克兰,何以至此?
「看理想」微信公众号
2022 年 2 月 25 日
(整理自「八分」347, 348 两期的内容)

乌克兰:“欧洲之门”的困境
孔田平《世界知识》2022 年第 5 期
(极简乌克兰史)

民族意识与帝国思维:乌克兰独立与俄乌纷争
韩克敌《俄罗斯东欧中亚研究》2020 年第 6 期

欧洲一体化与乌克兰的道路选择
陈新《欧洲研究》2014 年第 6 期
(讨论 2013—2014 年的乌克兰危机)

《韩非子》里的趣事

零零星星翻译过几个,忘记可以发在这里了。

原文粘贴自「中國哲學書電子化計劃」,白话文是在参考了《读古人书之〈韩非子〉》(邵永海,2017)的译文之后自己改写的。

1

秦王问公子汜要不要跟三国联军割地讲和。公子汜说,反正讲和你也要后悔,不讲和你也要后悔。讲和了,你要说本来不割地人家也会退兵,白割了。不讲和,联军继续攻城略地,你又要说早知道当时讲和了……秦王一想,宁可后悔地白割了,也不能等国家危急了后悔当时没讲和,于是就讲和了。

三國兵至韓,秦王謂樓緩曰:「三國之兵深矣,寡人欲割河東而講,何如?」對曰:「夫割河東,大費也;免國於患,大功也。此父兄之任也,王何不召公子氾而問焉?」王召公子氾而告之,對曰:「講亦悔,不講亦悔。王今割河東而講,三國歸,王必曰:三國固且去矣,吾特以三城送之。不講,三國也入韓,則國必大舉矣,王必大悔,王曰:不獻三城也。臣故曰:王講亦悔,不講亦悔。」王曰:「為我悔也,寧亡三城而悔,無危乃悔。寡人斷講矣。」(《韓非子·內儲說上》)

2

秦相甘茂的手下偷听到秦王对公孙衍说要请他做丞相。甘茂就跑到秦王面前说,恭喜大王找到新丞相了啊。秦王说我已经有你了,哪有什么新丞相。甘茂说,你不是要请公孙衍做丞相吗?秦王问甘茂你怎么知道。甘茂说公孙衍告诉我的啊。秦王觉得公孙衍是个大嘴巴,一怒之下就把他放逐了……

甘茂相秦惠王,惠王愛公孫衍,與之閒有所言,曰:「寡人將相子。」甘茂之吏道穴聞之,以告甘茂,甘茂入見王,曰:「王得賢相,臣敢再拜賀。」王曰:「寡人託國於子,安更得賢相?」對曰:「將相犀首。」王曰:「子安聞之?」對曰:「犀首告臣。」王怒犀首之泄,乃逐之。(《韓非子·外儲說右上》)

3

楚怀王的夫人知道怀王有了新欢,就表现出自己也特别喜欢这位新人的样子。怀王对夫人很赞赏,觉得她是孝子忠臣的榜样。后来,夫人对新欢说,大王虽然很喜欢你,但不太喜欢你的鼻子,你最好经常把鼻子遮住,大王才会更喜欢你。新人按夫人的话照做了。怀王就问夫人,她怎么老是遮着鼻子?夫人说不知道。怀王一再逼问。夫人说,之前听她说讨厌大王的气味。怀王大怒,让人割掉了新人的鼻子……

一曰。魏王遺荊王美人,荊王甚悅之,夫人鄭袖知王悅愛之也,亦悅愛之,甚於王,衣服玩好擇其所欲為之,王曰:「夫人知我愛新人也,其悅愛之甚於寡人,此孝子所以養親,忠臣之所以事君也。」夫人知王之不以己為妒也,因為新人曰:「王甚悅愛子,然惡子之鼻,子見王,常掩鼻,則王長幸子矣。」於是新人從之,每見王,常掩鼻,王謂夫人曰:「新人見寡人常掩鼻何也?」對曰:「不己知也。」王強問之,對曰:「頃嘗言惡聞王臭。」王怒曰:「劓之。」夫人先誡御者曰:「王適有言,必可從命。」御者因揄刀而劓美人。(《韓非子·內儲說下》)

4

子圉将孔子引荐给宋国太宰。孔子离开后,太宰对子圉说:「我见过孔子之后,看你就像看跳蚤虱子,我马上让孔子去见国君。」子圉对太宰说:「国君见了孔子,也会把你当跳蚤虱子的……」于是太宰没有向国君推荐孔子。

子圉見孔子於商太宰,孔子出,子圉入,請問客,太宰曰:「吾已見孔子,則視子猶蚤蝨之細者也。吾今見之於君。」子圉恐孔子貴於君也,因謂太宰曰:「君已見孔子,亦將視子猶蚤蝨也。」太宰因弗復見也。(《韓非子·說林上》)