15KB
公開:

2025/08/12

基礎数学4
線型代数演習
齋藤󠄁正彦著
東京大学出版会
1985年3月25日 初版

の誤りなどのメモ。

正誤表などがあるか、東京大学出版会に問い合わせたところ、存在せず、著者の逝去により質問にも答えない、と言うので。
普通に買わない方がいいかもしれないけれど、間違いが多すぎて、AIに壁打ちできる今では逆に良書となりうると思っている。(内容は良いので)

senkeidaisu_eratta.pdf
 時間ある時に書き足す〜

上のpdf用に作ったAIに作ってもらった正誤表用のtypstテンプレート

// template.typ v0.14.1
 #let jarticle(
  fontsize: 11pt,
  title: none,
  authors: (),
  abstract: [],
  date: none,
  doc,
) = {
  let roman = "Libertinus Serif"
  let mincho = "YuToppan Bunkyu Mincho"
  let kakugothic = "YuGothic"
  let math_font = "New Computer Modern Math"

  set text(lang:"ja", font: (mincho, roman), fontsize)

  // Use A4 paper
  set page(
    paper: "a4",
    margin: auto,
  )
  set par(justify: true)

  // 行間の調整
  set par(
  leading: 1.2em,
  justify: true,
  first-line-indent: 1.1em,
  )
  set par(spacing: 1.2em)
  show heading: set block(above: 1.6em, below: 0.6em)
  set heading(numbering: "1.1     ")
// 様々な場所でのフォント
  show heading: set text(font: kakugothic)
  show strong: set text(font: kakugothic)
  show emph: set text(font: (roman, kakugothic))
  show math.equation: set text(font: (math_font,roman,mincho)) 
// 見出しの下の段落を字下げするため
  show heading: it =>{
    it
    par(text(size: 0pt, ""))
  }
// 数式番号
  set math.equation(numbering: "(1)")
  show ref: it => {
    let eq = math.equation
    let el = it.element
    if el != none and el.func() == eq {
      // Override equation references.
      link(
        el.label,
        numbering(
        el.numbering,
        ..counter(eq).at(el.location())
        )
      )
    } else {
      // Other references as usual.
      it
    }
  }
// 目次
  show outline.entry.where(
    level: 1
  ): it => {
    v(1.2*fontsize, weak: true)
    it
  }
  set outline(indent: auto)
// 図のキャプション
  set figure(gap: 0.3em)
  show figure.caption: it => [
    #block(width: 90%, align(center, [#it]))
    #v(1em)
  ]
  show figure.caption: set text(font: kakugothic, 
  0.9*fontsize)
  show figure.caption: set align(left)
  // タイトル
  {
    set align(center)
    text(1.5*fontsize, font:kakugothic, strong(title))

    par(for a in authors {a})

    par(date)

    if abstract != [] {
      block(width:90%,text(0.9*fontsize,[
        *概要* \ 
      #align(left, abstract)
      ]))
    }
  }
  doc
}

#let appendix(app) = [
    #counter(heading).update(0)
    #set heading(numbering: "A.1     ")
    #app
]

// 正誤表用のテンプレート関数
#let errata(
  fontsize: 11pt,
  title: none,
  version: none,
  date: none,
  author: none,
  corrections: (),
  doc,
) = {
  let roman = "Libertinus Serif"
  let mincho = "Toppan Bunkyu Mincho"
  let kakugothic = "YuGothic"
  let math_font = "New Computer Modern Math"

  // 日本語を優先してフォントを設定
  set text(lang: "ja", font: (mincho, roman), fontsize)

  // Use A4 paper
  set page(
    paper: "a4",
    margin: auto,
  )
  set par(justify: true)

  // 行間の調整
  set par(
    leading: 1.2em,
    justify: true,
    first-line-indent: 1.1em,
  )
  set par(spacing: 1.2em)
  show heading: set block(above: 1.6em, below: 0.6em)
  set heading(numbering: "1.     ")

  // 様々な場所でのフォント
  show heading: set text(font: kakugothic)
  show strong: set text(font: kakugothic)
  show emph: set text(font: (roman, kakugothic))
  show math.equation: set text(font: (math_font, roman, mincho))

  // 見出しの下の段落を字下げするため
  show heading: it => {
    it
    par(text(size: 0pt, ""))
  }

  // 表のスタイル設定
  set table(
    stroke: (x, y) => if y == 0 { (bottom: 2pt) } else { (top: 0.5pt) },
    fill: (x, y) => if y == 0 { rgb("#f0f0f0") } else { none },
    align: (x, y) => if x == 0 { left } else { left + horizon }
  )

  // タイトル部分
  {
    set align(center)
    text(1.8*fontsize, strong(title))
    
    v(0.5em)
    
    // バージョンと作成日を一行でまとめて表示
    if version != none or date != none {
      let info_parts = ()
      if version != none {
        info_parts.push([#version])
      }
      if date != none {
        info_parts.push([#date])
      }
      text(0.9*fontsize, info_parts.join([ | ]))
      v(0.5em)
    }
    
    if author != none {
      text(0.9*fontsize, [作成者:#author])
      v(0.5em)
    }
    
    v(1em)
  }

  doc
}

// 正誤表テーブルのヘッダーを生成する関数(縦並び版)
#let corrections_table(corrections) = {
  for (i, c) in corrections.enumerate() {
    let page_val = c.at("page", default: "")
    let location_val = c.at("location", default: "")
    let error_val = c.at("error", default: "")
    let correction_val = c.at("correction", default: "")
    let note_val = c.at("note", default: none)
    
    [
      *#page_val - #location_val*
      
      #table(
        columns: (1fr, 4fr),
        stroke: (x, y) => if y == 0 { (bottom: 1pt) } else { (top: 0.5pt) },
        fill: (x, y) => if y == 0 { rgb("#fff0f0") } else if y == 1 { rgb("#f0fff0") } else { none },
        align: left,
        [*誤*], [#error_val],
        [*正*], [#correction_val],
        ..if note_val != none { ([*備考*], [#note_val]) } else { () }
      )
      
      #v(1em)
    ]
  }
}

#let 年月日 = "[year]年[month repr:numerical padding:none]月[day padding:none]日"

#let 年月 = "[year]年[month repr:numerical padding:none]月"