+

+299792458m

正式用户

最新动态 2周前

  1. 2周前
    2019-01-02 20:09:01

    音符的输入和显示

    $\text{MusiX\TeX}$的音符输入以如下宏为基础。

    \def\[email protected]#1\relax{\[email protected]\[email protected] \[email protected]\maxdimen % par defaut
    %% \edef\[email protected]{\[email protected] #1\relax\[email protected]}%
      \edef\[email protected]{\expandafter\[email protected] #1\relax\[email protected]}%
      \edef\[email protected]{\[email protected] #1\empty\[email protected]}%
    %% pas lettre
      \ifcat a\[email protected] \[email protected]\expandafter`\[email protected]\relax
    %% ramener au E (position zero en clef de sol, [email protected]=0)
        \ifnum\[email protected]>96\advance\[email protected]%
        \else\advance\[email protected]\@lxxxiii % ramener au S= E + 14
        \fi
        \advance\[email protected]\[email protected] \advance\[email protected]\[email protected] \advance\[email protected]\transpose
        \edef\[email protected]{\noexpand\[email protected]{\[email protected]}}%
    %% cas active character dont chiffre
      \else
        \let\[email protected]\empty
        \let\[email protected]\empty
        \ifcat 1\[email protected]
          \if =\[email protected] \let\@TI\na  \[email protected] \fi
          \if *\[email protected] \sk \[email protected] \fi
          \if .\[email protected] \let\@TI\pt   \[email protected] \fi
          \if >\[email protected] \let\@TI\dsh \[email protected] \fi
          \if <\[email protected] \let\@TI\dfl \[email protected] \fi
          \if !\[email protected] \transpose\normaltranspose \[email protected] \fi  
          \if '\[email protected] \advance\transpose\[email protected]@n   \[email protected] \fi  
          \if `\[email protected] \advance\transpose-\[email protected]@n  \[email protected] \fi
          \ifnum\[email protected]<\maxdimen \[email protected]#1\fi
        \else
          \if ^\[email protected] \let\@TI\sh \[email protected] \fi
          \if _\[email protected] \let\@TI\fl \[email protected] \fi
        \fi\[email protected]
      \fi}

    以上代码等价于如下形式。

    /* extern int n1, n8; */
    void xgetn1(char input) {
        if (input.length() == 0) return;
        n8 = 0;
        n1 = INT_MAX;
    
        if (isAlpha(char)) {
            n1 = (int) first;
            // 以E(第1线)为零点
            if (n1 >= 'A') n1 -= 'E'; // 大写字母
            else n1 -= ('e' - 14); // 小写字母; 大小写差为两个八度
            n1 += 2 * utRef; // 谱号导致的偏差
            n1 += transpose;
        } else {
            // 其他情况, 暂时不讨论
        }
    }

    可以看出,\[email protected]变量在五线谱排版时是用于储存竖向的偏差的,这在下方的音符显示使用的宏中可以看出。

    \def\[email protected]{%
      \ifnum\[email protected]<\@c
    % help lines \[email protected] (position)
        \ifnum\nblines>\[email protected]@ % no help lines for percussion instruments
          \[email protected]\[email protected]
          \ifnum\[email protected]<\[email protected] % waste memory, but saves time
            \loop \advance\[email protected]\[email protected] \ifnum\[email protected]<\[email protected]
              \advance\[email protected]\[email protected] \[email protected]
            \repeat
          \else
            \[email protected]\nblines \advance\[email protected]\[email protected] \multiply\[email protected]\[email protected]
            \ifnum\[email protected]>\[email protected]
              \loop \advance\[email protected]\@ne \ifnum\[email protected]>\[email protected]
                \advance\[email protected]\@ne \[email protected]
              \repeat
            \fi
          \fi
        \fi
    %
        \[email protected]\[email protected]\[email protected]
        \ifadvance \raise\[email protected]\[email protected]\[email protected] \else \raise\[email protected]\hbox{\[email protected]}\fi
        \[email protected] \advancetrue
      \fi}

    以上代码等价于如下形式。

    /* 
     * extern int n1, n5, numberOfLines;
     * extern float y1, internote;
     * extern boolean advance;
     */
    
    void outputAdvanced(float verticalOffset, Object content);
    void output(float verticalOffset, Object content);
    
    void writeNote(Object content) {
        // 绘制加线
        if (numberOfLines > 3) { // 3线以下为打击乐, 没有加线
            n5 = 0;
            if (n1 < -1) {
                n5 -= 1;
                while (n1 < n5) {
                    drawHelpLine(n5 - 1);
                    n5 -= 2;
                }
            } else {
                n5 = numberOfLines * 2 - 1;
                while (n1 > n5) {
                    drawHelpLine(n5 + 1);
                    n5 += 2;
                }
            }
        }
        y1 = n1 * internote;
        setstem(stem);
        
        if(advance) outputAdvanced(y1, content);
        else output(y1, content);
    }

    在简谱中,则将n1的意义相应变为所用的数字字符编码,不需要y1(因为简谱音符没有高低变化),同时增加一个n2用于上下加点。
    (待续)

  2. 2019-01-02 19:27:33
    + +299792458m 发表了帖子 $\text{\TeX}$下简谱排版系统的探索

    本人在高中时偶尔有排版简谱乐谱的需要,但是市面上很少有免费的简谱排版软件。我通过分析部分$\text{MusiX\TeX}$的源码,初步实现了一个简单的简谱的宏包。我在将来还会继续加入平连线、倚音等功能。
    本宏包排版的简谱样例见附件所示。此帖子将通过分析源码,对该宏包(及$\text{MusiX\TeX}$)的原理进行分析。

    关于$\text{\TeX}$编程

    据某网站(现在暂时找不到)所说,$\text{\TeX}$是图灵完备的。因此,可以用$\text{\TeX}$完成一般性质的编程工作,虽然可读性会很差。我会在每段$\text{\TeX}$源码之后附上等价的C风格伪代码。

  3. 11月前
    2018-02-06 10:13:42
    + +299792458m 更新于 求推荐好用的Linux发行版

    好了,我现在在新的电脑上回复这个帖子。
    现在 Windows 10 和 Ubuntu 16.04 的双系统已经装上了,顺便照网上的教程解决了双系统时间不对的问题。 /<

  4. 去年
    2018-01-08 07:52:56
    + +299792458m 更新于 求推荐好用的Linux发行版

    @勥巭炛 同Mac。。。
    写代码通常用Xcode啊。。贼尊贵
    虚拟机用Virtualbox直接带Linux没毛病啊。

    我现在用的是Mac上我爸(还是我爸同事?)装的双系统Win10。
    每次要用虚拟机的时候系统就提示“已禁止虚拟化”一类的,让我去BIOS里面改设置。
    但是问题是Mac上没有BIOS /<

  5. 2018-01-04 07:50:06
    + +299792458m 更新于 求推荐好用的Linux发行版

    @铪锶合金 kali linux
    用虚拟机装linux有什么问题吗,一定要配台电脑,壕啊

    我目前的电脑是一个Mac(都说了我不壕了),似乎开启不了虚拟化,并且感觉写代码也不方便

  6. 2018-01-03 08:36:06
    + +299792458m 发表了帖子 求推荐好用的Linux发行版

    打算搞一台编程专用电脑(我不是土豪),听从某教授(不是我们学校的)建议决定搞一个Linux发行版。

  7. 2017-10-23 08:15:59

    @baishuxu 我真的不觉得纠结这些东西有什么意义……
    比如三重积分,
    \[\int_{0}^{2\pi}\int_{0}^{\pi}\int_{0}^{1} r^2\sin\theta\mathrm{d}r\mathrm{d}\theta\mathrm{d}\varphi\]

    \[\int_{0}^{2\pi}\mathrm{d}\varphi\int_{0}^{\pi}\mathrm{d}\theta\int_{0}^{1}\mathrm{d}r\cdot r^2\sin\theta\]
    有什么本质区别吗?只是书写习惯罢了,任何训练有素的人都能一眼看出这两个积分是一个意思
    再比如整数集,写成$\mathbb{Z}$还是$\mathbf{Z}$真的很重要吗

    其实是我最近学TeX比较过火,开始有些关注“样式”了 /-_-

    但是在实际上并没有什么适应的困难(其实我平时写作业的时候也没有太在意这些),包括上面讲到的,还有括号使用的习惯和blackboard bold与正常粗体这些。

    我现在也感觉本帖唯一“有用的纠结”是书上那个缺字 /<<

  8. 2017-10-19 21:40:22

    更新完MiKTeX之后,XeLaTeX直接不运行了,以下是xelatex.log文件。

    2017-10-19 21:36:13,178+0800 INFO  xelatex - starting with command line: xelatex.exe --interaction=errorstopmode --synctex=1 "Chen's Unforgettable Failure.tex"
    2017-10-19 21:36:13,257+0800 INFO  xelatex - running 'initexmf' to refresh the file name database
    2017-10-19 21:36:24,388+0800 INFO  xelatex - running 'initexmf' to create font map files
    2017-10-19 21:36:26,894+0800 INFO  xelatex - running 'initexmf' to refresh language.dat
    2017-10-19 21:36:27,293+0800 INFO  xelatex - allowing known shell commands
    2017-10-19 21:36:27,295+0800 INFO  xelatex - enabling input (output) from (to) processes
    2017-10-19 21:36:27,357+0800 INFO  xelatex - going to create file: xelatex.fmt
    2017-10-19 21:36:36,421+0800 ERROR xelatex - C:\CTEX\MiKTeX\miktex\bin\initexmf.exe did not succeed; exitCode: 1
    2017-10-19 21:36:36,421+0800 ERROR xelatex - output:
    2017-10-19 21:36:36,421+0800 ERROR xelatex - 
    Sorry, but "MiKTeX Configuration Utility" did not succeed.
    
    The log file hopefully contains the information to get MiKTeX going again:
    
      C:/CTEX/UserData/miktex/log/initexmf.log
    
    You may want to visit the MiKTeX project page, if you need help.
    
    2017-10-19 21:36:36,437+0800 FATAL xelatex - The memory dump file could not be found.
    2017-10-19 21:36:36,437+0800 FATAL xelatex - Info: fileName="xelatex.fmt"
    2017-10-19 21:36:36,437+0800 FATAL xelatex - Source: Libraries\MiKTeX\TeXAndFriends\texmfapp.cpp
    2017-10-19 21:36:36,437+0800 FATAL xelatex - Line: 690
    2017-10-19 21:36:36,437+0800 INFO  xelatex - finishing with exit code 1
  9. 2017-10-19 07:07:35

    无关:

    楼主的书上甚至出现了缺字 /< 别的积分号都是正常的,但是在281页上“图解定积分写法各部分的名称”中印了一个大大的\[\mathsf{E}^b_a\,f(x)\,dx\]就是积分号变成了黑体的大写E /<

  10. 2017-10-18 21:45:53

    除法、分数

    定义:
    竖式分数:分子在分母之上,分数线水平,如\(\displaystyle \frac{1}{2}\)。
    横式分数:分子在分母左方,分数线为斜线,如\(1/2\)。

    中国:
    小学(算术)中一般使用除号“÷”及直式分数
    中学教科书中所有地方都使用直式分数,即使在指数等字号较小的场合,如\(\displaystyle a^\frac{b}{c}\)。
    不知道在上下限及高等数学教科书中如何,没有看过。

    美国:
    算术部分没有看过。
    在行内式中一律使用横式分数,即使是微分算子也要排成\(dy/dx\)。
    稍微复杂的场合使用括号。更加复杂的场合使用行间式及竖式分数。
    在行间式中分子、分母、上下标、上下限中一律使用横式分数。
    (插一句,行间式里面分数中的积分号也是写的正常大小的,并不等于“在这些地方按行内式排版”)

    如果有含有分数/分式的多项式除法要写运算过程,中国教科书貌似一般会把前后两个式子括起来,再用除号。美国教科书一般写一个大的直式分数,然后再在上下写横式分数。今天白天我看到了一个例子,但是忘了

查看更多