当前逻辑

  - 核心转换（convert_file/convert_directory/convert_from_string）：先注入默认
    frontmatter → 解析 frontmatter → 计算输出文件名（options.tc 只影响文件名繁转）→
    默认预处理（options.removelink 会触发 pre_remove_links）→ 若 options.tc=True 且
    postprocess is None，则注入 to_traditional_chinese 作为后处理 → 执行后处理链 →
    进入 pandoc/typst。
    to_traditional_chinese，去重），再 build_postprocessor_chain 组装；后处理器从工
    作区 postprocess/ 优先加载，不在则用内置；缺失时 click.echo 提示；最终把 chain
    chain；若 jobs>1 且只有 tc，会自动补 to_traditional_chinese；若 jobs>1 且传入自
    定义 callable，会警告并降为单线程。
  - core CLI（mark2pdf.core.cli）：--tc 直接传 postprocess=to_traditional_chinese，


 The TC option no longer takes effect when a custom postprocess function is
  provided, causing a regression where the tc flag is ignored for those callers.

  Review comment:

  - [P2] TC flag ignored when custom postprocess is provided — /Users/fangjun/
    python/pdfwork/src/mark2pdf/core/core.py:295-302
    When options.tc is set but a caller also supplies a custom postprocess, the new
    logic only injects the traditional-Chinese converter when postprocess is None;
    if a custom postprocess that doesn’t perform TC conversion is passed (e.g., via
    run_batch_conversion(..., tc=True, postprocess=my_fn)), the TC flag is silently
    ignored and the content is never converted. Previously TC conversion always ran
    after any postprocess, so this regresses the advertised flag for callers using
    custom postprocessors.

    这个问题的意思是，在 core.py 的代码逻辑中存在一个缺陷（Regression），导致当用户同时指定了“繁体转换（TC）”和“自定义后处理函数（custom postprocess）”时，繁体转换会失效。

具体解释如下：

当前逻辑（第 296-299 行）：

if options.tc and postprocess is None:
    from mark2pdf.postprocess.to_traditional_chinese import process as tc_process
    postprocess = tc_process

代码只在 postprocess 为 None（空）的时候，才会把 postprocess 赋值为繁体转换函数。
冲突点： 如果调用者（Caller）同时也提供了一个自定义的 postprocess 函数（例如用于其他文本清理工作），那么 postprocess 就不再是 None。
后果： 因为 postprocess 不为空，上述 if 判断条件失败，代码 跳过了 繁体转换函数的注入。 最终只执行了用户提供的自定义函数，而 options.tc 标志被忽略，导致并没有进行繁体转换。
预期行为： 无论是否有自定义后处理函数，只要 options.tc 为真，繁体转换都应该被执行（通常是在自定义处理之后）。

 

 已修正：无论是否提供自定义后处理，只要 options.tc=True，都会在后处理之后执行繁体
  转换。

  修改位置：

  - src/mark2pdf/core/core.py

  行为现在是：

  - 默认预处理 → 自定义 postprocess（若有）→ 繁体转换（tc）

  如果你希望目录模式也保持同样顺序（目前已同步），或者想把 tc 后处理也纳入
  process_builder 的链式组合，我可以继续统一。