arxiv-extensions

HTML version of arxiv & AI chat for arxiv

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         arxiv-extensions
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  HTML version of arxiv & AI chat for arxiv
// @author       [email protected]
// @match        https://arxiv.org/abs/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=arxiv.org
// @grant        GM_openInTab
// @license      MIT
// ==/UserScript==



(function() {
  'use strict';

  // 1. Create HTML/vanity/AI Chat link
  const createLink = function(name, url) {
    const link = document.createElement('a');
    link.style.cssText = `display: inline-block; border-left: 2px solid #fff; padding-left: 10px; margin-left: 10px;`;
    link.target = '_blank';
    link.href = url;
    link.textContent = name;
    return link;
  };

  const href = window.location.href;
  const htmlVersionEntry = createLink('HTML(ar5iv)', href.replace('arxiv.org', 'ar5iv.org'));
  const htmlVersionFromVanity = createLink('HTML(vanity)', href.replace('arxiv.org', 'www.arxiv-vanity.com').replace('/pdf/', '/papers/').replace('.pdf', '/'));
  const aiChatEntry = createLink('AI Chat', href.replace('arxiv.org', 'arxiw.org'));

  const target = document.querySelector('.header-breadcrumbs');
  target.appendChild(htmlVersionEntry);
  target.appendChild(htmlVersionFromVanity);
  target.appendChild(aiChatEntry);

  // 2. Open HTML or PDF in new tab
  const match = href.match(/arxiv\.org\/abs\/([a-zA-Z0-9.-]+(?:v\d+)?)/);
  if (!match) return;
  const id = match[1];

  const htmlUrl = `https://arxiv.org/html/${id}`;
  const pdfUrl = `https://arxiv.org/pdf/${id}.pdf`;

  fetch(htmlUrl, { method: 'HEAD' }). then(resp => {
    if (resp.ok && resp.headers.get('content-type')?.includes('html')) {
        GM_openInTab(htmlUrl, { active: false, insert: true, setParent: true });
    } else {
        GM_openInTab(pdfUrl, { active: false, insert: true, setParent: true });
    }
  }).catch(() => {
      GM_openInTab(pdfUrl, { active: false, insert: true, setParent: true });
  });
})();