рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБ-рдкреГрд╖реНрда рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╕рдВрдкрд╛рджрдХ рд╣реИ рдЬреЛ рдореИрдердЬреИрдХреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд▓рд╛рдн рджреЗрддрд╛ рд╣реИред рдорд▓реНрдЯреА-рдкреЗрдЬ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рд╕рдореАрдХрд░рдгреЛрдВ рдХрд╛ рдХреНрд░реЙрд╕ рд░реЗрдлрд░реЗрдВрд╕рд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ \ eqref {} рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореИрдердЬреИрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рддрд╛рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд▓рдХреНрд╖реНрдп рдкреГрд╖реНрда рдкрд░ рд╕рд╣реА рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХреЗред , рдирдП рдкреГрд╖реНрда рдкрд░ рдбрд╛рдпрд╡рд░реНрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рд╕рдВрджрд░реНрдн рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЯреЙрдЧрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрдж рдкрд░ рдорд╛рдЙрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐, рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рд╣реИ:
<!DOCTYPE html>
<html class="htmlMain">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="tex-svg-full.js" async></script>
<!-- <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg-full.js"></script> -->
</head>
<body>
<textarea id="source" style="width:400px; height:100px;"></textarea>
<input type="button" value="Click!" onclick="compile();">
<div id="result" style="display:inline-block;"></div>
<script>
var source=document.getElementById("source"),
result=document.getElementById("result");
function compile(){
result.innerHTML=source.value;
MathJax.texReset();
MathJax.typesetClear();
MathJax.typeset();
result.innerHTML=result.innerHTML;
}
</script>
</body>
</html>
рд╕рдорд╕реНрдпрд╛ рд▓рд╛рдЗрди рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ: result.innerHTML=result.innerHTML;
ред рдмрдЧ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдм рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмрдпрд╛рди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИ: result.innerHTML=result.innerHTML.replace();
ред рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ \toggle рдХрдорд╛рдВрдб рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рддрдХ рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА рд╣реИред
рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж
\toggle
рдХрдорд╛рдВрдб рдЯреЙрдЧрд▓ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП DOM рдиреЛрдб рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдм-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ result.innerHTML = result.innerHTML
рдкрд╣рд▓реЗ result
рдкреЗрдбрд╝ рдХреЛ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рддреА рд╣реИ рдФрд░ рдлрд┐рд░ result
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИред рдЪреВрдВрдХрд┐ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЯреЙрдЧрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧреА (рдЬреИрд╕рд╛ рдХрд┐ MathJax рдореЗрдиреВ, рдкреЙрдк-рдЕрдк рдФрд░ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдЬреЛ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ)ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдереЗ, рддреЛ рдЯреЙрдЧрд▓ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЯрд╛рдЗрдкрд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рдВрд╢реЛрдзрд┐рдд URL рдХреЛ рд░реА-рдЯрд╛рдЗрдкрд╕реЗрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдореЗрдВ рдЦреЛ рджреЗрдВрдЧреЗред
\eqref
(рдФрд░ \ref
) рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░реА рд▓рд┐рдВрдХ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓ рд▓реЗрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд▓реЗрдмрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмрд╛рд╣рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдкрд░рдВрдкрд░рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ \eqref{file.html#1.1}
рд╕рдореАрдХрд░рдг 1.1 рдХреЛ file.html
(рдпрд╛ рдХреЛрдИ рднреА URL рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ред рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ \eqref
рдЙрд╕ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдвреВрдВрдв рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореВрд▓ рдХреЛрдб рдареАрдХ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛ рд╕рдХреЗред рд╣рдо tagformat
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА url(id)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ id
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреВрд░реНрдг URL рд╣реИ рдФрд░ рдпрджрд┐ рд╣реИ рддреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВ, рдЕрдиреНрдпрдерд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдЪрд┐рдд URL рдмрдирд╛рдПрдВред
рдпрд╣рд╛рдБ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
<script>
MathJax = {
loader: {load: ['[tex]/tagformat']},
tex: {
packages: {'[+]': ['tagformat', 'external-eqref']},
tagformat: {
//
// If the ID is already a URL, use it, otherwise construct the url as usual
//
url: (id, base) => (id.indexOf('#') >= 0 ? id : base + '#' + encodeURIComponent(id))
}
},
startup: {
ready() {
//
// These would be replaced by import commands if you wanted to make
// a proper extension.
//
const Configuration = MathJax._.input.tex.Configuration.Configuration;
const CommandMap = MathJax._.input.tex.SymbolMap.CommandMap;
const Label = MathJax._.input.tex.Tags.Label;
const BaseMethods = MathJax._.input.tex.base.BaseMethods.default;
//
// Create a command map to override \ref and \eqref
//
new CommandMap('external-eqref', {
ref: ['HandleRef', false],
eqref: ['HandleRef', true]
}, {
HandleRef(parser, name, eqref) {
//
// Get the label parameter (keeping parse position as it is)
//
const i = parser.i;
const label = parser.GetArgument(name);
parser.i = i;
//
// If the label is of the form url#tag and the label doesn't already exist
// split the url and tag
// create a label using the tag and a proper URL for the link
//
if (label.indexOf('#') >= 0 && !(parser.tags.allLabels[label] || parser.tags.labels[label])) {
const [url, tag] = label.split(/#/);
const id = parser.tags.formatId(tag);
parser.tags.labels[label] = new Label(tag, parser.tags.formatUrl(id, url));
}
//
// Call the original function to perform the reference
//
BaseMethods.HandleRef(parser, name, eqref);
}
});
//
// Create the package for the overridden macros
//
Configuration.create('external-eqref', {
handler: {macro: ['external-eqref']}
});
MathJax.startup.defaultReady();
}
}
}
</script>
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рдПрдХ рдЙрдЪрд┐рдд рдЯреАрдПрдХреНрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреА рдлрд╛рдЗрд▓ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред
@dvpc , рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж,
рддреЛ рдпрд╣ рдореЗрд░рд╛ рдЦрд░рд╛рдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛ ... рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рдкреЗрдЬрд┐рдиреЗрд╢рди рдЕрд▓рдЧ рд╣реИ, рдореИрдВ рдмрд╛рд╣рд░реА рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рд╡ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝реЗ рд╣реИрдВ, рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХреЛ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддрд╛рдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдЙрджреНрдзреГрдд рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХреВрдВ рд╕рдореАрдХрд░рдг рдХрд┐рд╕ рдбрд┐рд╡ рдкрд░ рд░рд╣рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЕрди-рд╣рд╛рдЗрдб рдХрд░ рд╕рдХреВрдВред рдореИрдВ рдкрд╣рд▓реЗ рдХреЛрдб рдХрд╛ рдЖрджреА рдерд╛
var eqsLabelsArrayPerPage=[];
for(pageNum=0; pageNum<totalPageNumber; pageNum++){
var jax = MathJax.getAllJax("resultPage-"+pageNum);
var neWLabelsInPage=[];
for (var i=0, l=jax.length; i<l; i++) {
//alert(jax[i].math);
jax[i].math.replace(/\\label\{([^\}]+)\}/g, function(x,y){
neWLabelsInPage.push(y);
return false;
});
}
eqsLabelsArrayPerPage.push(neWLabelsInPage);
}
var eqOnWPVar;
result.innerHTML=result.innerHTML.replace(/(href\=\"\#mjx\-eqn\-([^\"]*)\")/g, function(x,y1,y2){
eqOnWPVar=eqsLabelsArrayPerPage.findIndex(function(x) {
return x.indexOf(y2) !== -1;
});
return y1+" onclick=\"currentPage="+eqOnWPVar+"; changePage();\"";
});
рдЬрд┐рд╕рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдЕрдм рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
var eqCitations=[];
result.innerHTML.replace(/(href\=\"\#mjx\-eqn\-([^\"]*)\")/g, function(x,y1,y2){
eqCitations=document.querySelectorAll("mrow[href='#mjx-eqn-"+y2+"']");
for(var i=0, len=eqCitations.length; i<len; i++){
eqCitations[i].parentNode.parentNode.parentNode.onclick=function(){
currentPage=eqsLabelsArrayPerPage.findIndex(function(subArray){
return subArray.indexOf(y2) !== -1;
});
changePage();
};
}
return false;
});
рдкреНрд░рддреНрдпреЗрдХ рдЙрджреНрдзрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореАрдХрд░рдг рдХреЗ рд▓рд┐рдП currentPage
рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди onclick
рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рддрдЪреАрдд рдореЗрдВ рдЬреЛ рд╕рдордп рджрд┐рдпрд╛, рдЙрд╕рдХреА рдореИрдВ рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ
рдЦреИрд░, рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рд╡рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдм рдореИрдердЬреЗрдХреНрд╕ рдХреЗ рднреАрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдКрдкрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕реЗрдЯрдЕрдк рд▓рдЧрддрд╛ рд╣реИред
рддреАрди рдореБрдЦреНрдп рдШрдЯрдХ рд╣реИрдВ: рдорд╛рдирдХ рдЯреИрдЧрд┐рдВрдЧ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдЬреЛ рдЙрд╕ рдкреГрд╖реНрда рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдмрд▓ рд╡рд╛рд▓рд╛ рд╕рдореАрдХрд░рдг рдЪрд╛рд▓реВ рд╣реИ, рдПрдХ рдЯреАрдПрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП \ref
рдФрд░ \eqref
рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ рд╕рдВрджрд░реНрдн рдЬреЛ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреЛрд╕реНрдЯ-рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛ рдПрдХ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЙрди рд▓рд┐рдВрдХ рдкрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдФрд░ рдкреГрд╖реНрда рдЦреЛрд▓рддреЗ рд╣реИрдВ (рдФрд░ рд╡рд░реНрддрдорд╛рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ)ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдврд╛рдВрдЪрд╛ рджреЗрдВ)ред рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реА рдлрд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд▓реЗрдмрд▓ рд╡рд╛рд▓реЗ рд╕рдореАрдХрд░рдг рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдВрдХ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╣реИрдВред
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<title>Page switching \eqref links</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script>
let currentPage = 1;
MathJax = {
startup: {
ready() {
//
// These would be replaced by import commands if you wanted to make
// a proper extension.
//
const TagsFactory = MathJax._.input.tex.Tags.TagsFactory;
const AmsTags = MathJax._.input.tex.ams.AmsConfiguration.AmsTags;
//
// Subclass the AmsTags object to track page information
//
class PageTags extends AmsTags {
constructor() {
super();
this.page = null; // the div for the last page where we found an equation
this.pageNo = ""; // the number of that page
this.math = null; // the MathItem for the current equation
}
//
// Save the MathItem and do the usual startup.
//
startEquation(math) {
this.math = math;
super.startEquation(math);
}
//
// Check if there are labels for this equation.
// If so, find the page for this MathItem
// and save the page with the label information.
// The do the usual finishing up.
//
finishEquation(math) {
const labels = Object.keys(this.labels);
if (labels.length) {
const page = this.getPage();
labels.map((label) => {this.labels[label].page = page});
}
super.finishEquation(math);
}
//
// If there is a cached page div and this MathItem is in it, return its page number.
// Otherwise, look through the parents of the math until you find its page.
// If you found a page, cache it and get its number.
// Return the page number.
//
getPage() {
let node = this.math.start.node;
if (this.page && this.page.contains(node)) return this.pageNo;
while (node && (!node.id || node.id.substr(0,11) !== 'resultPage-')) {
node = node.parentNode;
}
if (node) {
this.page = node;
this.pageNo = node.id.substr(11);
}
return this.pageNo;
}
}
//
// These would be replaced by import commands if you wanted to make
// a proper extension.
//
const Configuration = MathJax._.input.tex.Configuration.Configuration;
const CommandMap = MathJax._.input.tex.SymbolMap.CommandMap;
const Label = MathJax._.input.tex.Tags.Label;
const ParseUtil = MathJax._.input.tex.ParseUtil.default;
//
// Create a command map to override \ref and \eqref to handle page changes.
//
new CommandMap('page-eqref', {
ref: ['HandleRef', false],
eqref: ['HandleRef', true]
}, {
//
// Copied from BaseMethods.HandleRef, and modified to add page information.
//
HandleRef(parser, name, eqref) {
//
// Get the label name and look up its data.
//
const label = parser.GetArgument(name);
let ref = parser.tags.allLabels[label] || parser.tags.labels[label];
//
// If none, then reprocess this item, if we are on the first pass,
// and use a blank label.
//
if (!ref) {
if (!parser.tags.refUpdate) {
parser.tags.redo = true;
}
ref = new Label();
}
//
// Get the tag string.
//
const tag = (eqref ? parser.tags.formatTag(ref.tag) : ref.tag);
//
// Create an mrow with the parsed tags contents and href link.
//
const node = parser.create('node', 'mrow', ParseUtil.internalMath(parser, tag), {
href: parser.tags.formatUrl(ref.id, parser.options.baseURL), 'class': 'MathJax_ref'
});
//
// If the page of the linked quation is not the same as our own equation,
// Add a page attribute to the mrow.
//
if (ref.page !== parser.tags.getPage()) {
node.attributes.set('data-page', ref.page);
}
parser.Push(node);
}
});
//
// Create the package for the overridden macros
//
Configuration.create('page-eqref', {
handler: {macro: ['page-eqref']},
tags: {page: PageTags}
});
//
// Do the normal setup (create the input and output jax and other objects)
//
MathJax.startup.defaultReady();
//
// The listener function for when a link goes to a different page:
// Unhide the linked page and hide the current one.
// Save the current page as the linked one.
//
const listener = function (event) {
const n = this.getAttribute('data-page');
document.getElementById('resultPage-' + n).classList.remove('hidden');
document.getElementById('resultPage-' + currentPage).classList.add('hidden');
currentPage = n;
};
//
// Add a post-filter to the output jax to look for links that are to different
// pages, add the event listener to the <a> element for the link, and
// propagate the page to the anchor where the listener can find it.
//
MathJax.startup.output.postFilters.add(({data}) => {
for (const link of data.querySelectorAll('[data-page]')) {
link.parentNode.addEventListener('click', listener, true);
link.parentNode.setAttribute('data-page', link.getAttribute('data-page'));
}
});
}
},
tex: {
packages: {'[+]': ['page-eqref']},
tags: 'page'
}
}
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
<style>
div {
border: 1px solid grey;
padding: .5em;
}
h1 {
font-size: 130%;
margin-top: 0;
}
.hidden {
display: none;
}
.spacer {
height: 40em;
width: 1em;
background-color: red;
margin: 1em 0;
border: none;
}
</style>
</head>
<body>
<div class="spacer"></div>
<div id="resultPage-1">
<h1>Page 1</h1>
A math formula:
$$E = mc^2. \tag{1}\label{eq1}$$
That is the formula.
We link to \eqref{eq3}.
</div>
<div id="resultPage-2" class="hidden">
<h1>Page 2</h1>
This page has a different formula:
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}. \tag{2}\label{eq2}$$
And a second one:
$$\frac{x+1}{x-1}. \tag{2.1}\label{eq2.1}$$
We link to \eqref{eq1}.
</div>
<div id="resultPage-3" class="hidden">
<h1>Page 3</h1>
This one has yet another formula:
$$f(a) = \frac{1}{2\pi i} \oint\frac{f(z)}{z-a}dz. \tag{3}\label{eq3}$$
We link to \eqref{eq2}, and \eqref{eq3}.
</div>
<div class="spacer"></div>
</body>
</html>
рдЧрдгрд┐рдд рдХреЗ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдХреА рд▓рд╛рд▓ рдкрдЯреНрдЯрд┐рдпрд╛рдБ рдкреГрд╖реНрда рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рдЙрдЪрд┐рдд рд╕рдореАрдХрд░рдг рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрд╕рд╡реАрдЬреА рдкрджреЛрдВ рдкрд░ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рдореИрдВ рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реЛ, рд▓реЗрдХрд┐рди рд╡рд╣ рдЕрднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред рдХреЙрдордирдПрдЪрдЯреАрдПрдордПрд▓ рдЗрд╕рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдХрд░рддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рд╡рд╣ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдореИрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╛рдП рдЧрдП рд╕рдордп рдФрд░ рдКрд░реНрдЬрд╛ рдХреА рдкрд░реНрдпрд╛рдкреНрдд рд╕рд░рд╛рд╣рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдЖрдкрдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЦрд╛, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреВрдВ, рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдХреЛрдИ рджрд┐рдХреНрдХрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдереА, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдереА рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдПред